Saltar al contenido

¿Cómo cambiar el idioma de una aplicación Flutter sin reiniciar la aplicación?

Te sugerimos que pruebes esta resolución en un entorno controlado antes de pasarlo a producción, saludos.

Solución:

envuelve tu MaterialApp en un StreamBuilder que se encargará de proporcionar la Locale valor a su aplicación. Y le permitirá cambiarlo dinámicamente sin reiniciar su aplicación. Este es un ejemplo que usa el paquete rxdart para implementar la transmisión:

  @override
  Widget build(BuildContext context) 
    return StreamBuilder(
      stream: setLocale,
      initialData: Locale('ar',''),
      builder: (context, localeSnapshot) 
        return MaterialApp(
          // other arguments
          locale: localeSnapshot.data,
        );
      
    );
  

  Stream setLocale(int choice) 

    var localeSubject = BehaviorSubject() ;

    choice == 0 ? localeSubject.sink.add( Locale('ar','') ) : localeSubject.sink.add( Locale('en','') ) ;


    return localeSubject.stream.distinct() ;

  

La demostración anterior es solo una forma básica de cómo lograr lo que desea, pero para una implementación adecuada de las secuencias en su aplicación, debe considerar el uso de BloC en toda la aplicación, lo que mejorará significativamente la calidad de su aplicación al reducir la cantidad de construcciones innecesarias.

Si desea cambiar el idioma de la aplicación sin reiniciar la aplicación y también sin ningún complemento, puede seguir los pasos a continuación:

  1. En el archivo principal de la aplicación, cambie el valor predeterminado MyHomePage a un StatefullWidgeten StatefullWedget por ejemplo MyHomePage crear un static método setLocal de la siguiente manera

    class MyHomePage extends StatefulWidget 
      MyHomePage(Key key) : super(key: key);
    
       static void setLocale(BuildContext context, Locale newLocale) async 
          _MyHomePageState state = context.findAncestorStateOfType<_MyHomePageState>();
            state.changeLanguage(newLocale);
         
    
      @override
     _MyHomePageState createState() => _MyHomePageState();
    
    

donde _MyHomePageState es el state de tu MyHomePage artilugio

  1. En tus state crear un static método changeLanguage:

     class _MyHomePageState extends State 
      Locale _locale;
    
       changeLanguage(Locale locale) 
         setState(() 
          _locale = locale;
         );
        
    
      @override
      Widget build(BuildContext context) 
          return MaterialApp(
            debugShowCheckedModeBanner: false,
            title: 'Afghanistan',
            theme: ThemeData(primaryColor: Colors.blue[800]),
            supportedLocales: [
              Locale('fa', 'IR'),
              Locale('en', 'US'),
              Locale('ps', 'AFG'),
            ],
            locale: _locale,
            localizationsDelegates: [
              AppLocalizationsDelegate(),
              GlobalMaterialLocalizations.delegate,
              GlobalWidgetsLocalizations.delegate
            ],
            localeResolutionCallback: (locale, supportedLocales) 
              for (var supportedLocale in supportedLocales) 
                if (supportedLocale.languageCode == locale.languageCode &&
                    supportedLocale.countryCode == locale.countryCode) 
                  return supportedLocale;
                
              
              return supportedLocales.first;
            ,
            initialRoute: splashRoute,
            onGenerateRoute: Router.generatedRoute,
          );
       
      
    
  2. Ahora desde las páginas de su aplicación puede cambiar el idioma llamando al setLocal método y pasar un nuevo Locale de la siguiente manera:

    Locale newLocale = Locale('ps', 'AFG');
    MyHomePage.setLocale(context, newLocale);
    
  3. Recuerde que debe crear un LocalizationDelegate,

  4. Aquí está el enlace al tutorial escrito y la aplicación de demostración

Es más fácil usar el paquete easy_localization.

Para cambiar el idioma, por ejemplo:

onTap: ()
 EasyLocalization.of(context).locale = Locale('en', 'US'); 

Aprendí a usar este paquete con este video: Youtube Video Link

Comentarios y calificaciones

Si te mola el proyecto, tienes la opción de dejar un ensayo acerca de qué te ha impresionado de esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *