概述

#

flutter 工具将不再生成合成的 package:flutter_gen 包或修改应用程序的 package_config.json 文件。

之前引用 package:flutter_gen 的应用程序或工具应直接引用生成到应用程序源代码目录中的源文件。

此外,在使用生成的 i10n 源时,现在需要 generate: true 属性。

背景

#

flutter_gen 是一个虚拟(合成)包,由 flutter 命令行工具创建,允许开发者导入该包以访问生成的符号和功能,例如用于国际化。由于该包未在应用程序的 pubspec.yaml 中列出,并通过重写生成的 package_config.json 文件创建,因此产生了许多问题。

迁移指南

#

此更改仅影响在 pubspec.yaml 中包含以下条目的应用程序:

yaml
flutter:
  generate: true

如果您的应用程序之前在没有此属性的情况下使用了 gen-i10n,现在则需要此属性。

一个合成包(package:flutter_gen)由应用程序创建和引用。

dart
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// ...
const MaterialApp(
  title: 'Localizations Sample App',
  localizationsDelegates: AppLocalizations.localizationsDelegates,
  supportedLocales: AppLocalizations.supportedLocales,
);

有两种方法可以从导入 package:flutter_gen 中迁移。

  1. 在随附的 l10n.yaml 文件中指定 synthetic-package: false

    l10n.yaml
    yaml
    synthetic-package: false
    
    # The files are generated into the path specified by `arb-dir`
    arb-dir: lib/i18n
    
    # Or, specifically provide an output path:
    output-dir: lib/src/generated/i18n
  2. 启用 explicit-package-dependencies 功能标志。

    sh
    flutter config --explicit-package-dependencies

时间线

#

合并版本:3.28.0-0.0.pre
稳定版本:3.32.0

在此更改落地后的下一个稳定版本中,将移除对 package:flutter_gen 的支持。

参考资料

#

相关问题

  • 问题 73870,首次发现 package:flutter_gen pub 相关问题。
  • 问题 102983,其中概述了 package:flutter_gen 问题。
  • 问题 157819,其中讨论了 `--implicit-pubspec-resolution`。

相关文章