在flutter中更改语言后如何刷新应用程序当前屏幕?

时间:2019-12-04 10:31:54

标签: flutter internationalization

class ChangeLanguage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Change Language'),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Change'),
          onPressed: () {
            navigator.pop(context);
          },
        ),
      ),
    );
  }
  • 我想在按下凸起的按钮并调用导航器pop(context)之后根据新的语言刷新以前的屏幕。
  • 我正在使用easy_localization 1.3.1,当我导航回到上一个屏幕时,布局没有反转

1 个答案:

答案 0 :(得分:0)

如果您想在不重新启动应用程序且没有任何插件的情况下更改应用程序语言,则可以按照以下步骤操作:

  1. 在应用程序的主文件中,例如在StatefullWedget中创建MyHomePage方法static,如下所示

    setLocal

其中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(); } 是您的_MyHomePageState小部件的state

  1. 在您的MyHomePage中创建一个state方法static

    changeLanguage
  2. 现在,您可以在应用程序页面中通过调用 class _MyHomePageState extends State<MyHomePage> { 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, ); } } 方法来更改语言,并按如下所示传递新的setLocal

    Locale
    1. 请记住,您需要创建一个Locale newLocale = Locale('ps', 'AFG'); MyHomePage.setLocale(context, newLocale);

    2. Here是演示应用程序的链接