按钮更改语言Flutter

路德米拉·穆库拉·多斯·雷斯

我正在Flutter中构建一个应用程序,到目前为止,我使用带JSON的国际化版本,其中该应用程序的语言基于用户在手机中默认使用的语言,其工作情况还不错,但是我想给用户只需单击按钮,然后应用程序无需更改设置即可更改语言,从而无需更改电话即可更改系统语言设置。

这是代码:

主要的:

import 'package:flutter/material.dart';
import 'package:flutter_app_darkmode/app_localizations.dart';
import 'package:flutter_localizations/flutter_localizations.dart';

  void main() => runApp(MyApp());

  class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) => MaterialApp(
      supportedLocales: [
      Locale('en', "ZA"),
      Locale('pt', "MZ"),
      ],
      localizationsDelegates: [
      AppLocalizations.delegate,
      GlobalMaterialLocalizations.delegate,
      GlobalWidgetsLocalizations.delegate
      ],
      localeResolutionCallback: (locale, supportedLocales) {
       for (var supportedLocale in supportedLocales) {
        if (supportedLocale.languageCode == locale.languageCode &&
            supportedLocale.countryCode == locale.countryCode) {
          return supportedLocale;
          } else {
          if (MyHomePage.local != null) {
            for (int i = 0; i < supportedLocales.length; i++) {
              if (MyHomePage.local == supportedLocales.elementAt(i)) {
                return supportedLocales.elementAt(i);
              }}}}}
            return supportedLocales.first;
            },
           home: MyHomePage(),
          );}

         class MyHomePage extends StatefulWidget {
         @override
         _MyHomePageState createState() => _MyHomePageState();

           class _MyHomePageState extends State<MyHomePage> {
           getLocale() {
           Locale myLocale = Localizations.localeOf(context);
            print(myLocale);}

            @override
             Widget build(BuildContext context) {
              getLocale();
               return Scaffold(
                body: Center(
                child: Padding(
                 padding: const EdgeInsets.all(8.0),
                  child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                   Text(
                   AppLocalizations.of(context).translate('first_string'),
                   style: TextStyle(fontSize: 25),
                   textAlign: TextAlign.center,),
                  Text(
                  AppLocalizations.of(context).translate('second_string'),
                    style: TextStyle(fontSize: 25),
                    textAlign: TextAlign.center,),
                    RaisedButton(
                      child: Text('PT'),
                    onPressed: () {},
                     ),],),),),);}}

app_locations类:

import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

class AppLocalizations {
final Locale locale;

  AppLocalizations(this.locale);

  static AppLocalizations of(BuildContext context) {
   return Localizations.of<AppLocalizations>(context, AppLocalizations);
  }

    static const LocalizationsDelegate<AppLocalizations> delegate =
    _AppLocalizationsDelegate();

    Map<String, String> _localizedStrings;

       Future<bool> load() async {
       String jsonString =
        await rootBundle.loadString('lang/${locale.languageCode}.json');

        Map<String, dynamic> jsonMap = json.decode(jsonString);

       _localizedStrings = jsonMap.map((key, value) {
       return MapEntry(key, value.toString());
        });

        return true;}

       String translate(String key) {
      return _localizedStrings[key];}}

     class _AppLocalizationsDelegate
     extends LocalizationsDelegate<AppLocalizations> {
     const _AppLocalizationsDelegate();

       @override
       bool isSupported(Locale locale) {
       return ['en', 'pt'].contains(locale.languageCode);}

       @override
       Future<AppLocalizations> load(Locale locale) async {
       AppLocalizations localizations = new AppLocalizations(locale);
       await localizations.load();
       return localizations;}

        @override
        bool shouldReload(_AppLocalizationsDelegate old) => false;}
圣诞

您可以使用自己喜欢的状态管理方法设置locale属性MaterialApp例如:

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();

  static _MyAppState of(BuildContext context) => context.findAncestorStateOfType<_MyAppState>();
}

class _MyAppState extends State<MyApp> {
  Locale _locale;

  void setLocale(Locale value) {
    setState(() {
      _locale = value;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      locale: _locale,
      home: Dashboard(),
    );
  }
}

class Dashboard extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        TextButton(
          child: Text("Set locale to German"),
          onPressed: () => MyApp.of(context).setLocale(Locale.fromSubtags(languageCode: 'de')),
        ),
        TextButton(
          child: Text("Set locale to English"),
          onPressed: () => MyApp.of(context).setLocale(Locale.fromSubtags(languageCode: 'en')),
        ),
      ],
    );
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

语言更改按钮

来自分类Dev

如何更改PayPal按钮的语言环境?

来自分类Dev

单击按钮时更改文化(语言)

来自分类Dev

Flutter NumberFormat格式,无需更改语言

来自分类Dev

在vba对话框中更改是/否按钮的语言

来自分类Dev

更改Facebook之类的按钮语言而无需重新加载页面

来自分类Dev

贝宝智能付款按钮:如何更改语言

来自分类Dev

更改Facebook之类的按钮语言而无需重新加载页面

来自分类Dev

如何更改Zope中Plone的LinguaPlone语言按钮的顺序?

来自分类Dev

在vba对话框中更改是/否按钮的语言

来自分类Dev

使用切换按钮引导程序更改语言

来自分类Dev

以编程方式使用按钮更改应用程序语言

来自分类Dev

Flutter:-根据按钮更改页面上的输出

来自分类Dev

Flutter:更改TextField焦点上的按钮颜色

来自分类Dev

Flutter - 运行时更改按钮颜色

来自分类Dev

在TextFormField Flutter的值更改时禁用AlertDialog按钮

来自分类Dev

如何在Flutter中更改RateMyAppNoButton上的后退按钮

来自分类Dev

如何在 Flutter 中更改 CupertinoNavigationBar 中后退按钮的颜色

来自分类Dev

将键盘设置为仅使用特定语言,而不允许使用更改语言按钮。目标 c

来自分类Dev

在Android中单击按钮时如何更改应用程序的语言

来自分类Dev

在运行时使用按钮更改应用程序语言

来自分类Dev

如何在Android Studio中通过单击按钮更改键盘输入语言

来自分类Dev

如何在ios swift中点击按钮时更改应用程序语言

来自分类Dev

如何在Flutter中的多个按钮之间更改一个按钮的颜色?

来自分类Dev

根据语言更改文本

来自分类常见问题

更改支持的语言环境

来自分类Dev

更改全屏消息语言

来自分类Dev

linkedin语言代码更改

来自分类Dev

更改Behat语言

Related 相关文章

  1. 1

    语言更改按钮

  2. 2

    如何更改PayPal按钮的语言环境?

  3. 3

    单击按钮时更改文化(语言)

  4. 4

    Flutter NumberFormat格式,无需更改语言

  5. 5

    在vba对话框中更改是/否按钮的语言

  6. 6

    更改Facebook之类的按钮语言而无需重新加载页面

  7. 7

    贝宝智能付款按钮:如何更改语言

  8. 8

    更改Facebook之类的按钮语言而无需重新加载页面

  9. 9

    如何更改Zope中Plone的LinguaPlone语言按钮的顺序?

  10. 10

    在vba对话框中更改是/否按钮的语言

  11. 11

    使用切换按钮引导程序更改语言

  12. 12

    以编程方式使用按钮更改应用程序语言

  13. 13

    Flutter:-根据按钮更改页面上的输出

  14. 14

    Flutter:更改TextField焦点上的按钮颜色

  15. 15

    Flutter - 运行时更改按钮颜色

  16. 16

    在TextFormField Flutter的值更改时禁用AlertDialog按钮

  17. 17

    如何在Flutter中更改RateMyAppNoButton上的后退按钮

  18. 18

    如何在 Flutter 中更改 CupertinoNavigationBar 中后退按钮的颜色

  19. 19

    将键盘设置为仅使用特定语言,而不允许使用更改语言按钮。目标 c

  20. 20

    在Android中单击按钮时如何更改应用程序的语言

  21. 21

    在运行时使用按钮更改应用程序语言

  22. 22

    如何在Android Studio中通过单击按钮更改键盘输入语言

  23. 23

    如何在ios swift中点击按钮时更改应用程序语言

  24. 24

    如何在Flutter中的多个按钮之间更改一个按钮的颜色?

  25. 25

    根据语言更改文本

  26. 26

    更改支持的语言环境

  27. 27

    更改全屏消息语言

  28. 28

    linkedin语言代码更改

  29. 29

    更改Behat语言

热门标签

归档