Saltar al contenido principal

Los mensajes localizados se generan en el código fuente, no en un paquete sintético.

Al usar `package:flutter_localizations`, la ubicación generada por defecto (y, eventualmente, la única ubicación posible) se encuentra dentro de tu directorio de código fuente (`lib/`), y no en el paquete sintético `package:flutter_gen`.

Resumen

#

La herramienta flutter ya no generará un paquete sintético package:flutter_gen ni modificará el archivo package_config.json de la app.

Las aplicaciones o herramientas que hacían referencia a package:flutter_gen deben en su lugar hacer referencia directamente a los archivos fuente generados en el directorio de código fuente de la app.

Además, la propiedad generate: true ahora es obligatoria cuando se utiliza código fuente l10n generado.

Contexto

#

flutter_gen es un paquete virtual (sintético) que es creado por la herramienta de línea de comandos flutter para permitir a los desarrolladores importar ese paquete para acceder a los símbolos y funcionalidades generados, como por ejemplo para la internacionalización. Dado que el paquete no está listado en el pubspec.yaml de una app, y se crea reescribiendo el archivo package_config.json generado, se han originado muchos problemas.

Guía de migración

#

Este cambio solo afecta a las apps que tienen la siguiente entrada en su pubspec.yaml:

yaml
flutter:
  generate: true

Si tu app utilizaba previamente gen-l10n sin esta propiedad, ahora es obligatoria.

Se crea un paquete sintético (package:flutter_gen) que es referenciado por la app:

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

Existe una forma de migrar y dejar de importar package:flutter_gen:

  1. Especifica synthetic-package: false en el archivo l10n.yaml adjunto:

    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
    

Timeline

#

Lanzado en la versión: 3.28.0-0.0.pre
Versión estable: 3.32.0

En la próxima versión estable después de que se aplique este cambio, se eliminará el soporte de package:flutter_gen.

Referencias

#

Issues relevantes:

  • Issue 73870, donde se encontraron por primera vez los problemas de pub con package:flutter_gen.
  • Issue 102983, donde se detallan los problemas de package:flutter_gen.
  • Issue 157819, donde se discute --implicit-pubspec-resolution.

Artículos relevantes: