Skip to main content

Localized messages are generated into source, not a synthetic package.

Summary

#

The flutter tool will no longer generate a synthetic package:flutter_gen or modify the package_config.json of the app.

Applications or tools that referenced package:flutter_gen should instead reference source files generated into the app's source directory directly.

Background

#

flutter_gen is a virtual (synthetic) package that is created by the flutter command-line tool to allow developers to import that package to access generated symbols and functionality, such as for internationalization. As the package isn't listed in an app's pubspec.yaml, and is created via re-writing the generated package_config.json file, many problems have been created.

Migration Guide

#

This change only affects apps that have the following entry in their pubspec.yaml:

yaml
flutter:
  generate: true

A synthetic package (package:flutter_gen) is created and referenced by the app:

dart
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// ...
const MaterialApp(
  title: 'Localizations Sample App',
  localizationsDelegates: AppLocalizations.localizationsDelegates,
  supportedLocales: AppLocalizations.supportedLocales,
);

There are two ways to migrate away from importing package:flutter_gen:

  1. Specify synthetic-package: false in the accompanying l10n.yaml file:

    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. Enable the explicit-package-dependencies feature flag:

    sh
    flutter config explicit-package-dependencies

Timeline

#

Landed in version: Not yet
Stable release: Not yet

One stable release after this change lands, package:flutter_gen support will be removed.

References

#

Relevant Issues:

  • Issue 73870, where package:flutter_gen pub problems are first found.
  • Issue 102983, where package:flutter_gen problems are outlined.
  • Issue 157819, where --implicit-pubspec-resolution is discussed.

Relevant Articles: