Flatter смените язык на другой странице - Интернационализация приложений - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь создать приложение, но у меня возникает проблема, когда я хочу изменить язык приложения. Я нашел несколько руководств по этому поводу, и я могу изменить язык, отредактировав код:

index.dart

class MyApp extends StatefulWidget {
  @override
//  _MyAppState createState() => new _MyAppState();
  State<StatefulWidget> createState(){
    return _MyAppState();
  }

}


class _MyAppState extends State<MyApp> {
  // This widget is the root of your application.

  SpecificLocalizationDelegate _specificLocalizationDelegate;

  @override void initState() {
    // TODO: implement initState
    super.initState();
    helper.onLocaleChanged = onLocaleChange;
    _specificLocalizationDelegate =  SpecificLocalizationDelegate(new Locale('fr')); <-- I change value to change the language
  }


  onLocaleChange(Locale locale){
    setState((){
      _specificLocalizationDelegate = new SpecificLocalizationDelegate(locale);
    });

  }

  int _selectedPage =0;
  final _pageOptions = [
    HomeScreen(),
    ProfileScreen(),
  ];

  @override
  Widget build(BuildContext context) {

    return MaterialApp(
      title: 'NewApp',
      initialRoute: "/",
      onGenerateRoute: MyRoutes().getRoute,
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        new FallbackCupertinoLocalisationsDelegate(),
        //app-specific localization
        _specificLocalizationDelegate
      ],

      supportedLocales: [Locale('fr'),Locale('en'), Locale('en')],
      locale: _specificLocalizationDelegate.overriddenLocale ,
      theme: ThemeData(

        primarySwatch: Colors.red,
      ),

      home : Scaffold(
        body: _pageOptions[_selectedPage],
        bottomNavigationBar: BottomNavigationBar(
            currentIndex: _selectedPage,
            onTap: (int index){
              setState(() {
                _selectedPage = index;
                AppLocalizations.load(Locale('en'));
              });
            },
            items: [
              BottomNavigationBarItem(
                  icon: Icon(Icons.home),
                  title: Text('Home'),
              ),
              BottomNavigationBarItem(
                  icon: Icon(Icons.account_circle),
                  title: Text('Me'),
              ),

            ]
        ),
      ),
    );
  }

}

Я создаю bottomBar и в значке профиля я получаю страницу где я хочу редактировать язык локали. На самом деле, я не очень понимаю код. Как я могу отправить в файл app.dart значение языка новостей?

Это мой профиль страницы:


class ProfileScreen extends StatefulWidget {
  @override
  _ProfileScreen createState() => _ProfileScreen();
}

class _ProfileScreen extends State<ProfileScreen> {
  //languagesList also moved to the Application class just like the languageCodesList
  SpecificLocalizationDelegate _specificLocalizationDelegate;

  @override void initState() {
    // TODO: implement initState
    super.initState();
    helper.onLocaleChanged = onLocaleChange;
    _specificLocalizationDelegate =
        SpecificLocalizationDelegate(new Locale('fr'));


  onLocaleChange(Locale locale) {
    setState(() {
      _specificLocalizationDelegate = new SpecificLocalizationDelegate(locale);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          "Select language",
        ),
      ),
      body:
        Column(
          mainAxisAlignment: MainAxisAlignment.start,
          children: <Widget>[
            Expanded(
              flex: 1,
              child: ListTile(
                leading: RaisedButton(
                  onPressed: () {
                      setState(() {
                      AppLocalizations.load(Locale('en'));
//                      helper.onLocaleChanged(new Locale('en'));
                    });
                  },
                  child: Text('ENGLISH'),
                ),
                trailing: RaisedButton(
                  onPressed: () {
                    setState(() {
                      AppLocalizations.load(Locale('ar'));
//                      helper.onLocaleChanged(new Locale('ar'));
                    });
                  },
                  child: Text('GERMAN'),
                ),
              ),
            ),
            Expanded(
              flex: 1,
              child: Text(
                AppLocalizations.of(context).health,
                style: TextStyle(fontSize: 20),
              ),
            )
          ],

        )
    );
  }
}

In the profile page I can translate when I click on the button.
````

Thank you
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...