我正在使用共享首选项执行一些收费信息,但在 iOS 中不起作用,而在 Android 中则按预期工作
@override
void initState() {
super.initState();
readData();
}
我有 2 个文本字段,用于在 readData() 有数据时填充它
final email = TextFormField(
keyboardType: TextInputType.emailAddress,
autofocus: false,
initialValue: _email,
validator: (input) {
if(input.isEmpty) {
return 'Introduce un Email';
}
},
onSaved: (input) => _email = input,
decoration: InputDecoration(
hintText: 'Email',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
border:
OutlineInputBorder(borderRadius: BorderRadius.circular(32.0))),
);
final password = TextFormField(
autofocus: false,
obscureText: true,
initialValue: _password,
validator: (input) {
if(input.isEmpty) {
return 'Introduce la contraseña';
}
},
onSaved: (input) => _password = input,
decoration: InputDecoration(
hintText: 'Contraseña',
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
border:
OutlineInputBorder(borderRadius: BorderRadius.circular(32.0))),
);
readData() async {
final prefs = await SharedPreferences.getInstance();
setState(() {
_email = prefs.getString('email');
_password = prefs.getString('password');
});
}
在 Android 中运行良好,但在 iOS 中则不然
最佳答案
我认为更新文本字段值的正确方法是使用 TextEditingController
。
您的代码将如下所示:
在您所在的州
final TextEditingController emailCtrl = TextEditingController();
final TextEditingController passwordCtrl = TextEditingController();
readData() async {
final prefs = await SharedPreferences.getInstance();
emailCtrl.text = prefs.getString('email');
password.text = prefs.getString('password');
}
您的文本字段
final email = TextFormField(
// ... your other arguments
controller: emailCtrl
);
final password = TextFormField(
// ... your other arguments
controller: passwordCtrl
);
关于ios - setState 在 iOS 上的工作效果与在 Android 上不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56097872/