setState 在 iOS 上的工作不等于 Android
setState is not working iqual on iOS than Android
我正在使用共享偏好做一些收费信息,但在 iOS 中不工作,而在 Android 中按预期工作
@override
void initState() {
super.initState();
readData();
}
当 readData() 有数据时,我有 2 个文本字段用于填充它
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');
}
您的 TextFields
final email = TextFormField(
// ... your other arguments
controller: emailCtrl
);
final password = TextFormField(
// ... your other arguments
controller: passwordCtrl
);
我正在使用共享偏好做一些收费信息,但在 iOS 中不工作,而在 Android 中按预期工作
@override
void initState() {
super.initState();
readData();
}
当 readData() 有数据时,我有 2 个文本字段用于填充它
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');
}
您的 TextFields
final email = TextFormField(
// ... your other arguments
controller: emailCtrl
);
final password = TextFormField(
// ... your other arguments
controller: passwordCtrl
);