在flutter中使用getX打开页面时自动调整页面语言

Posted

技术标签:

【中文标题】在flutter中使用getX打开页面时自动调整页面语言【英文标题】:Automatically adjust the language of the page when you open it using getX in flutter 【发布时间】:2021-10-28 12:13:29 【问题描述】:

当你在flutter中使用getX打开页面时自动调整页面的语言,我想在一个页面上选择语言,当我选择它时,我会移动到另一个页面并使用我选择的语言

Container(
                margin: const EdgeInsets.only(top: 20.0),
                padding: const EdgeInsets.only(left: 20.0, right: 20.0),
                child: new Row(
                  children: <Widget>[
                    new Expanded(
                      child: FlatButton(
                        shape: new RoundedRectangleBorder(
                            borderRadius: new BorderRadius.circular(30.0)),
                        splashColor: this.primaryColor,
                        color: this.primaryColor,
                        child: new Row(
                          children: <Widget>[
                            new Padding(
                              padding: const EdgeInsets.only(left: 20.0),
                              child: Text(
                                "English",
                                style: TextStyle(color: Colors.white),
                              ),
                            ),
                            new Expanded(
                              child: Container(),
                            ),
                            new Transform.translate(
                              offset: Offset(15.0, 0.0),
                              child: new Container(
                                padding: const EdgeInsets.all(5.0),
                                child: FlatButton(
                                  shape: new RoundedRectangleBorder(
                                      borderRadius:
                                          new BorderRadius.circular(28.0)),
                                  splashColor: Colors.white,
                                  color: Colors.white,
                                  child: Icon(
                                    Icons.arrow_forward,
                                    color: this.primaryColor,
                                  ),
                                  onPressed: () 
                                    box.write('lang', 'en_US');
                                    Get.to(() => LoginScreen1());
                                  ,
                                ),
                              ),
                            )
                          ],
                        ),
                        onPressed: () 
                          box.write('lang', 'en_US');
                          Get.to(() => LoginScreen1());
                        ,
                      ),
                    ),
                  ],
                ),
              ),

第二页

Padding(
                  padding: const EdgeInsets.only(left: 40.0),
                  child: Text(
                    'serverAddress'.tr,
                    style: TextStyle(color: Colors.grey, fontSize: 16.0),
                  ),
                ),

还有更多

【问题讨论】:

【参考方案1】:

onPressed函数中,我们可以相应地使用Get.updateLocale函数:

onPressed: () 
  box.write('lang', 'en_US');
  Locale locale = Locale('en','en_US');
  Get.updateLocale(locale);
  Get.to(() => LoginScreen1());

【讨论】:

【参考方案2】:

GetX 提供更改语言环境的功能

Get.updateLocale(locale);

您需要通过区域设置来更改语言。例如:

var locale = Locale('hi','IN');
Get.updateLocale(locale);

【讨论】:

我知道但不知道放在哪里 就在Get.to(() =&gt; LoginScreen1());之前【参考方案3】:

我们有很多解决方案... 您阅读了有关颤振国际化的文档吗? https://flutter.dev/docs/development/accessibility-and-localization/internationalization

此链接显示了解决您的问题的好方法。 但我用另一种方法使用 getx...

我有一个包含所有字符串本地化的类(en、es、pt ...),在我的 Main.dart 中,我有一个 getx obs 来监听本地化的所有变化。

见:

Main.dart:

class MyApp extends StatelessWidget 
  
  const MyApp(Key key) : super(key: key);

  @override
  Widget build(BuildContext context)
   
    return GetX<AppController>(
      builder: (_) =>(
        _buildWithTheme(context,_)
      )
    );
    
  

  Widget _buildWithTheme(BuildContext context, AppController state) 

    return  MaterialApp(
      title: 'App Title',
      theme:  makeAppTheme(),           
      debugShowCheckedModeBanner: false,
      initialRoute: '/',
      locale: setLocale(state),      
      navigatorKey: GeneralUtils.globalCtx,
      routes: 
          '/': (context) => const Page1(),
          '/page2': (context) => const Page2(),
      ,

    );
  

  Locale setLocale(AppController state)

    switch (state.pdvLocale) 
      
      case 'en':
        return const Locale('en','US');
      case 'es':
        return const Locale('es','');
      case 'pt':       
      default:
        return const Locale('pt','BR');
    

  

Page1.dart:

Text(AppLocalization.hello)

AppLocalization.dart

class AppLocalizations

  static String hellow;

  static setStringsLocation(String localization)

    switch (localization) 
      case 'en':
        hello = 'hello';
        break;
      case 'es':   
        hello = 'hola';
        break;
      case 'pt':
      default:
        hello = 'ola';
    
   

AppController.dart

Future<void> setLocale(String value) async
    pdvLocale = value;
    await StoreData.instance.saveString('pdv_locale',value); 
    await AppLocalizations.setStringsLocation(pdvLocale);

    update();

这个解决方法对我使用 getx 非常有效。

【讨论】:

以上是关于在flutter中使用getX打开页面时自动调整页面语言的主要内容,如果未能解决你的问题,请参考以下文章

Flutter GetX 路由会重定向到 initialRoute

Flutter:使用 GetX 实用程序函数时存储语言和主题偏好

对 Flutter 应用程序的 getX dart 包中的 RxList 进行排序

如何使 getx 颤振以移动到下一个中​​间件

使用 GetX 改变主题?

flutter 完全使用GetX 主题切换 以及 自创建Widget的颜色随主题变化方案