概述

#

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 的支持。

参考资料

#

相关问题

  • Issue 73870,首次发现 package:flutter_gen pub 问题的地方。
  • Issue 102983,概述了 package:flutter_gen 问题的地方。
  • Issue 157819,讨论了 --implicit-pubspec-resolution 的地方。

相关文章