本地化消息将生成到源代码中,而不是合成包。
概述
#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
:
在配套的
l10n.yaml
文件中指定synthetic-package: false
。l10n.yamlyamlsynthetic-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
启用
explicit-package-dependencies
功能标志。shflutter 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
的地方。
相关文章
- 国际化 Flutter 应用,该功能的规范文档。