You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加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生成代码:

  1. 更新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 # 新增:用于代码生成
    
  2. 创建本地化资源文件
    在lib/l10n目录下创建.arb格式的语言文件,例如:

    • app_en.arb(模板文件):
      {
        "helloWorld": "Hello World",
        "@helloWorld": {
          "description": "The classic hello world message"
        }
      }
      
    • app_pt_BR.arb(葡萄牙语文件):
      {
        "helloWorld": "Olá Mundo"
      }
      
  3. 添加l10n配置文件
    在项目根目录创建l10n.yaml:

    arb-dir: lib/l10n
    template-arb-file: app_en.arb
    output-localization-file: app_localizations.dart
    
  4. 执行代码生成命令
    此时再运行你的build_runner命令,就会生成对应的.g本地化代码文件:

    flutter packages pub run build_runner watch --delete-conflicting-output
    
  5. 在代码中使用自定义本地化
    更新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:16:22