前提
(例)
Flutterでアプリ開発をしています。main.dartを別のファイルに2分割して、MaterialApp()が記述されていないほうのファイルからMaterialAppのlocaleを動的に変更したいです。
MaterialApp()がある方(main.dart)
dart
1//..... 2import 'settings.dart'; 3 4void main() { 5 runApp(NewApp()); 6} 7 8String lang = "en"; 9class NewApp extends StatelessWidget { 10 final title = "Tokage"; 11 12 13 Widget build(BuildContext context) { 14 return MaterialApp( 15 locale: Locale(lang), 16 localizationsDelegates: [ 17 AppLocalizations.delegate, 18 GlobalMaterialLocalizations.delegate, 19 GlobalWidgetsLocalizations.delegate, 20 GlobalCupertinoLocalizations.delegate, 21 ], 22 supportedLocales: [ 23 const Locale('ja', ''), 24 const Locale('en', ''), 25 ], 26 title: title, 27 //..... 28 home: new TokageHome()); 29 } 30} 31
分割したもう一つの方(settings.dart)
dart
1//..... 2import 'main.dart'; 3 4//prefはmain.dartでgetInstance()されています 5late SharedPreferences pref; 6 7class EnvironmentSettings extends StatefulWidget { 8 EnvironmentSettings() : super(); 9 10 _EnvironmentState createState() => new _EnvironmentState(); 11} 12 13class _EnvironmentState extends State<EnvironmentSettings> { 14 15 void initState() { 16 super.initState(); 17 } 18 19 20 Widget build(BuildContext context) { 21 return Scaffold( 22 appBar: AppBar( 23 title: Text(AppLocalizations.of(context)!.settings), 24 actions: <Widget>[], 25 ), 26 body: ListView( 27 children: <Widget>[ 28 Row( 29 mainAxisAlignment: MainAxisAlignment.spaceBetween, 30 children: [ 31 Container( 32 padding: EdgeInsets.fromLTRB(100, 30, 0, 0), 33 child: Row(children: [ 34 Text( 35 AppLocalizations.of(context)!.language, 36 style: 37 TextStyle(fontSize: 23, fontWeight: FontWeight.w300), 38 ) 39 ]), 40 ), 41 Container( 42 padding: EdgeInsets.fromLTRB(0, 30, 100, 0), 43 child: DropdownButton<String>( 44 value: pref.getString("language"), 45 items: [ 46 DropdownMenuItem( 47 child: Text(AppLocalizations.of(context)!.english), 48 value: "en", 49 ), 50 DropdownMenuItem( 51 child: Text(AppLocalizations.of(context)!.japanese), 52 value: "ja", 53 ) 54 ], 55 onChanged: (value) { 56 changeSetting("language", value.toString()); 57 }, 58 ), 59 width: 200, 60 ) 61 ], 62 ) 63 ], 64 )); 65 } 66 67 68 void changeSetting(String key, String value) { 69 pref.setString(key, value); 70 if(key == "ja"){ 71 //ここにlocaleを変数valueの値に変更するコードを書きたいです 72 } 73 setState(() {}); 74 } 75} 76
バージョン
Flutter 3.3.8
Dart 2.18.4
を使っています。
初心者ですのでおかしい部分が多々あるかもしれませんが、教えていただけると大変うれしいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/18 10:08