Я пытаюсь создать приложение, но у меня возникает проблема, когда я хочу изменить язык приложения. Я нашел несколько руководств по этому поводу, и я могу изменить язык, отредактировав код:
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