我需要更新屏幕的值。当我按下按钮时,它必须设置屏幕的值。这是可行的,但当我尝试更改一个字段并转到下一个字段时,第一个值会变回第一个值。这是我的代码部分:
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方法都是Rebuild。所以您可以将代码放在initstate方法中。
也可以使用late关键字。
late TextEditingController emailController;
@override
void initState() {
emailController = TextEditingController(text: widget.account.email!);
// TODO: implement initState
super.initState();
}