前提
Flutterを使用してアプリケーションを作成しています。
その中で日付を選択する機能を持たせたいのですが、
カレンダーを表示させて選択できるように、showDatePickerを使ってみました。
しかしカレンダーを実装するページは、あるMaterialAppページから派生させたScaffoldのみを返すページとして作っていました。
結果として、「MaterialAppが見つからない(Scaffoldの中ではlocalization delegatesが設定できない)」という内容のエラーが出ています。
どうにか実装させることはできないでしょうか?
実現したいこと
カレンダー選択後の日付を日本語で表示させたい。
・以下キャプチャ1枚目のボタンをクリックして、カレンダーを表示。
・2枚目のキャプチャで、カレンダーから日付を選択。(ここの日本語化はできました。)
・3枚目のキャプチャで、選択した日付を日本語で画面表示させたい。
発生している問題・エラーメッセージ
該当のソースコード
dart
1 2 Widget build(BuildContext context) { 3 return Scaffold( 4 appBar: AppBar( 5 title: const Text("●●●●"), 6 ), 7 body: Column(children: <Widget>[ 8 9 Expanded( 10 child: SingleChildScrollView( 11 child: Form( 12 key: formKeySignUp, 13 child: Center(child: Column(children: [ 14 expansionCard(ExpansionTile( 15 title: const Text('●●●●'), 16 children: [ 17 Row( 18 crossAxisAlignment: CrossAxisAlignment.center, 19 children: [ 20 const Expanded(child: Text('●●●●')), 21 Container( 22 width: 300, 23 padding: const EdgeInsets.all(16), 24 child: Column(children: [ 25 Text(selectedDate != "" ? selectedDate : "積込日を指定してください"), 26 27 ElevatedButton( 28 onPressed: () => _pickDate(context), 29 child: const Text("カレンダー表示") 30 ) 31 ], 32 ) 33 ) 34 ], 35 ), 36/* 以下省略 */ 37 38 /* 日付取得ボタンを押下したとき */ 39 Future _pickDate(BuildContext context) async { 40 //DatePickerの初期値 41 final initialDate = DateTime.now(); 42 //DatePickerを表示し、選択されたら変数に格納する 43 final newDate = await showDatePicker( 44 context: context, 45 //初期値を設定 46 initialDate: initialDate, 47 //選択できる日付の上限 48 firstDate: DateTime(DateTime.now().year - 1), 49 lastDate: DateTime(DateTime.now().year + 2), 50 // locale: const Locale('ja') //★この部分をコメントアウトしているとカレンダーは動くが、英語表記で取得する。逆にコメントアウトを外すとエラーになる。 51 ); 52 53 //nullチェック 54 if (newDate != null) { 55 //選択された日付を変数に格納 56 setState(() => selectedDate = (DateFormat.yMMMd()).format(newDate)); 57 } else { 58 //nullならば何もしない 59 return; 60 } 61 }
試したこと
これらのブログを参考にして進めています。
https://www.choge-blog.com/programming/flutterdatepicker-howto/
https://webbibouroku.com/Blog/Article/flutter-datepicker-ja
カレンダー内部が日本語出来ているのは、
・pubspec.ymlに 「flutter_localizations: sdk: flutter」を追記してpubgetしたこと
・main.dartに、
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale("en"),
const Locale("ja"),
],
を追記したこと
が要因です。
補足情報(FW/ツールのバージョンなど)
開発ツール:AndroidStudio4.01
DartSDKバージョン:2.17.6
Flutterバージョン:3.05
もし不可能ならば別の手段で日付を取得する方法を考えますが、
もしScaffoldのままでも可能ならば、そのやり型を教えていただきたいです。
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー