添加flutter_localizations后,Flutter项目无法生成.g Dart文件
问题分析与解决方案
核心结论
flutter_localizations本身不需要通过build_runner生成.g文件,你当前的代码和配置仅启用了Flutter自带的系统组件本地化(比如Material/Cupertino组件的默认多语言文本),这类场景不需要代码生成操作,所以运行build_runner不会产生.g文件是正常现象。
分场景处理
场景1:仅使用Flutter自带系统本地化
你当前的配置已经满足需求,直接运行项目即可让系统组件(如按钮、日期选择器等)自动加载pt_BR语言的默认文本。无需额外执行build_runner命令。
场景2:需要自定义APP本地化字符串
如果要实现APP自有文本的多语言(比如自定义按钮文本、页面标题等),则需要补充配置intl相关依赖,才能通过build_runner生成代码:
更新pubspec.yaml依赖
dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter intl: ^0.18.1 # 新增:用于本地化字符串处理 dev_dependencies: build_runner: ^2.4.6 intl_generator: ^0.18.1 # 新增:用于代码生成创建本地化资源文件
在lib/l10n目录下创建.arb格式的语言文件,例如:app_en.arb(模板文件):{ "helloWorld": "Hello World", "@helloWorld": { "description": "The classic hello world message" } }app_pt_BR.arb(葡萄牙语文件):{ "helloWorld": "Olá Mundo" }
添加l10n配置文件
在项目根目录创建l10n.yaml:arb-dir: lib/l10n template-arb-file: app_en.arb output-localization-file: app_localizations.dart执行代码生成命令
此时再运行你的build_runner命令,就会生成对应的.g本地化代码文件:flutter packages pub run build_runner watch --delete-conflicting-output在代码中使用自定义本地化
更新AppWidget中的本地化代理,添加自定义的本地化委托:import 'package:flutter_gen/gen_l10n/app_localizations.dart'; // 导入生成的文件 // ... localizationsDelegates: [ AppLocalizations.delegate, // 新增自定义委托 GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: [ const Locale('en'), const Locale('pt', 'BR'), ],
内容的提问来源于stack exchange,提问作者Matheus
相关产品推荐
相关产品推荐

