概述

#

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 的地方。

相關文章