Flutter中TextFormField的输入问题
Input problems of TextFormField in Flutter
我需要更新屏幕的值。当我按下按钮时,它必须设置屏幕的值。它正在做,但是当我尝试更改一个字段并转到下一个字段时,第一个值变回第一个值。这是我的代码部分:
class _AccountScreenState extends State<AccountScreen> {
final api = ApiServices();
var formKey = GlobalKey<FormState>();
var emailController = TextEditingController();
var pwdController = TextEditingController();
var phoneController = TextEditingController();
@override
Widget build(BuildContext context) {
emailController.text = widget.account.email!;
phoneController.text = widget.account.phoneNumber!;
...
child: TextFormField(controller: emailController,
decoration: InputDecoration(prefixText: "Email: ",
prefixStyle: TextStyle(fontWeight: FontWeight.w600),
labelText: "E-mail",
border: OutlineInputBorder(borderSide: BorderSide.none),
fillColor: Colors.white,
filled: true),
),
...
您可以从 Build 方法中删除代码,因为当您使用 setstate 方法时,所有 Build 方法都会重新生成。
所以你可以把你的代码放在 initstate 方法中。
你也可以使用 late 关键字。
late TextEditingController emailController;
@override
void initState() {
emailController = TextEditingController(text: widget.account.email!);
// TODO: implement initState
super.initState();
}
我需要更新屏幕的值。当我按下按钮时,它必须设置屏幕的值。它正在做,但是当我尝试更改一个字段并转到下一个字段时,第一个值变回第一个值。这是我的代码部分:
class _AccountScreenState extends State<AccountScreen> {
final api = ApiServices();
var formKey = GlobalKey<FormState>();
var emailController = TextEditingController();
var pwdController = TextEditingController();
var phoneController = TextEditingController();
@override
Widget build(BuildContext context) {
emailController.text = widget.account.email!;
phoneController.text = widget.account.phoneNumber!;
...
child: TextFormField(controller: emailController,
decoration: InputDecoration(prefixText: "Email: ",
prefixStyle: TextStyle(fontWeight: FontWeight.w600),
labelText: "E-mail",
border: OutlineInputBorder(borderSide: BorderSide.none),
fillColor: Colors.white,
filled: true),
),
...
您可以从 Build 方法中删除代码,因为当您使用 setstate 方法时,所有 Build 方法都会重新生成。 所以你可以把你的代码放在 initstate 方法中。
你也可以使用 late 关键字。
late TextEditingController emailController;
@override
void initState() {
emailController = TextEditingController(text: widget.account.email!);
// TODO: implement initState
super.initState();
}