Flutter:使用Controller为AlertDialog的TextFormField设置初始值
解决TextFormField通过Controller显示初始值的问题
你遇到的问题核心是没有将获取到的teamName赋值给TextEditingController的text属性——虽然teamName的值打印正确,但没传递给输入框的控制器,所以输入框显示为空。
解决步骤
在创建AlertDialog弹窗之前,直接给textController的text属性赋值为当前的teamName即可:
// 关键:弹窗创建前给控制器设置初始值 textController.text = teamName; AlertDialog alert = AlertDialog( title: const Text( "Modifier le nom de votre équipe"), content: Form( key: _thekey, child: TextFormField( controller: textController, validator: (val) => val?.length == 0 ? "Indiquez un nom d'équipe s'il vous plait" : null, // 此处onSaved可移除,控制器已自动同步输入内容 // onSaved: (val) => textController.text = val!, ), ), actions: [ ElevatedButton( onPressed: (() { teamName = textController.text; print("le nom de la teamsss est : $teamName"); setState(() { print( "le nom de l'équipe est: $teamName"); updateTeam( team.idTeam, textController, idCoach, context); }); }), child: const Text("Modifier")) ], ); showDialog( barrierDismissible: true, context: context, builder: (BuildContext ctx) { return alert; });
补充说明
- 如果你的textController是在State类中初始化的(比如
final TextEditingController textController = TextEditingController();),每次弹窗前赋值都会覆盖之前的内容,不会有残留问题。 - 原代码中的
onSaved回调属于冗余逻辑,TextEditingController会自动同步输入框的内容,无需手动赋值。
内容的提问来源于stack exchange,提问作者zsupraz
相关产品推荐
相关产品推荐

