gpt4 book ai didi

flutter - 如何在不重启应用程序的情况下更改 Flutter 应用程序语言?

转载 作者:IT王子 更新时间:2023-10-29 06:42:47 25 4
gpt4 key购买 nike

在我的应用程序的设置页面中,我想添加一个控制应用程序语言的选项。

我可以像这样在启动应用程序之前设置语言:

  @override
Widget build(BuildContext context) {
return MaterialApp(
// other arguments
locale: Locale('ar'),
);
}

但是否可以在不重新启动应用程序的情况下更改语言?

最佳答案

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

  1. 在应用程序的主文件中,将默认的MyHomePage更改为StatefullWidget,例如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 是您的MyHomePage 小部件的状态

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

     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,
    );
    }
    }
  2. 现在,您可以从应用程序的页面调用 setLocal 方法并传递新的 Locale 来更改语言,如下所示:

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

  4. Here是书面教程和演示应用程序的链接

关于flutter - 如何在不重启应用程序的情况下更改 Flutter 应用程序语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55889889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com