Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Declare package:flutter_gen to be deprecated #11343

Merged
merged 4 commits into from
Oct 31, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
---
title: Localized messages are generated into source, not a synthetic package.
description: >-
When use `package:flutter_localizations`, the default generated location
matanlurey marked this conversation as resolved.
Show resolved Hide resolved
(and eventually, only possible location) is within your source (`lib/`)
directory, and not the synthetic package `package:flutter_gen`.
---

## Summary

The `flutter` tool will no longer generate a synthetic `package:flutter_gen`
or modify the `package_config.json` of the application. Applications or tools
that previously referenced `package:flutter_gen` will instead reference source
files generated into the application 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][Internationalizing Flutter apps]. As the package is not
listed in an app's `pubspec.yaml`, and is created via re-writing the (generated)
`package_config.json`, numerous problems have been created.

## Migration Guide

This change only effects users that have the following in their `pubspec.yaml`:

```yaml
flutter:
generate: true
```

A synthetic package (`package:flutter_gen`) is created and referenced by the
application;
matanlurey marked this conversation as resolved.
Show resolved Hide resolved

```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:

```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. Pass `--no-implicit-pubspec-resolution` to invocations of the `flutter` tool:

```sh
flutter run --no-implicit-pubspec-resolution
```

## Timeline

Not released

Not released + 1, `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:

- [Internationalizing Flutter apps][], the canonical documentation for the
feature.

[l10n.yaml]: https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization#configuring-the-l10n-yaml-file
[Issue 73870]: https://github.com/flutter/flutter/issues/73870
[Issue 102983]: https://github.com/flutter/flutter/issues/102983
[Issue 157819]: https://github.com/flutter/flutter/issues/157819
[Internationalizing Flutter apps]: https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization#adding-your-own-localized-messages
Original file line number Diff line number Diff line change
Expand Up @@ -119,10 +119,10 @@ See [Deprecated imperative apply of Flutter's Gradle plugins][imperative-apply]
for details of switching to the newer plugin DSL.

To smoke test whether your build relies on a `.flutter-plugins` file, you
can use the flag `--no-emit-legacy-flutter-plugins`:
can use the flag `--no-implicit-pubspec-resolution`:

```sh
flutter build apk --no-emit-legacy-flutter-plugins
flutter build apk --no-implicit-pubspec-resolution
```

Any build tools or scripts that might rely on that file being output will now
Expand Down
2 changes: 2 additions & 0 deletions src/content/release/breaking-changes/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ release, and listed in alphabetical order:

### Not yet released to stable

* [Localized messages are generated into source, not a synthetic package][]
* [`.flutter-plugins-dependencies` replaces `.flutter-plugins`][] <!-- Branch cut starts here, below will be in next stable -->
* [`Color` wide gamut support][]
* [Remove invalid parameters for `InputDecoration.collapsed`][]
Expand All @@ -41,6 +42,7 @@ release, and listed in alphabetical order:
* [Set default for SystemUiMode to Edge-to-Edge][]
* [Deprecate `ThemeData.dialogBackgroundColor` in favor of `DialogThemeData.backgroundColor`][]

[Localized messages are generated into source, not a synthetic package]: /release/breaking-changes/flutter-generate-i10n-source
[`.flutter-plugins-dependencies` replaces `.flutter-plugins`]: /release/breaking-changes/flutter-plugins-configuration
[`Color` wide gamut support]: /release/breaking-changes/wide-gamut-framework
[Remove invalid parameters for `InputDecoration.collapsed`]: /release/breaking-changes/input-decoration-collapsed
Expand Down
Loading