Flutterで趣味のアプリ開発をしている初心者プログラマです。
遷移元画面からModalRoute.of(context)?.settings.argumentsを使ってStringを受け取り、
これをTextFieldの初期値にしたいです。
TextFieldの値は、遷移先画面で任意に変更してその後の処理に用いるため、Controllerを使っています。
貼り付けたコードだと、
Build関数の中で受け取り・反映させているため当たり前ですが、
遷移先画面での変更を受付けなくなってしまいます(Buildが走る度に初期化されてしまう)。
そこで、この2行の処理を
String menuName = ModalRoute.of(context)?.settings.arguments as String;
menuNameController.text = menuName;
_modRecipeState(){} の中(Stateのイニシャライザ?)や、
initState(){}を用意しその中に入れてみたのですが、エラーでビルドできません。
つぎはぎの知識でここまでやってきており、
contextやstateのことはしっかり理解できていないことを自覚していますが、
どういったところの考え方が間違っているか、ご指摘いただけると幸いです。
また、やりたいこと(TextFieldに初期値を受け取り、変更可能にする)のためにはどのような方法があるでしょうか。
Dart/Flutter
1import 'package:flutter/material.dart'; 2import 'package:flutter/widgets.dart'; 3import './main.dart'; 4 5class ModRecipe extends StatefulWidget { 6 const ModRecipe({Key? key}) : super(key: key); 7 8 State<ModRecipe> createState() => _modRecipeState(); 9} 10 11class _modRecipeState extends State<ModRecipe> { 12 13 _modRecipeState(){ 14 } 15 16 17 var menuNameController = TextEditingController(); 18 String modRecipeName = ""; 19 20 21 Widget build(BuildContext context) { 22 23 String menuName = ModalRoute.of(context)?.settings.arguments as String; 24 menuNameController.text = menuName; 25 26 return Scaffold( 27 body: Center( 28 child: SingleChildScrollView( 29 child: Column( 30 mainAxisAlignment: MainAxisAlignment.center, 31 children: [ 32 Container(width: 220,height: 60, 33 child: TextField( 34 controller: menuNameController, 35 onChanged: (text){ 36 setState(() { 37 modRecipeName=text; 38 }); 39 }, 40 ), 41 ), 42 ], 43 ), 44 ), 45 ), 46 ); 47 } 48}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/15 10:19
2022/06/15 11:09
2022/06/15 12:26