ios - setState 在 iOS 上的工作效果与在 Android 上不同

标签 ios flutter setstate

我正在使用共享首选项执行一些收费信息,但在 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/

相关文章:

timer - 在Flutter中,什么情况下使用timer.cancel()而不是timer = null?

mobile - Flutter 如何使用 ListView 水平和 GridView 垂直滚动屏幕

javascript - setState 不适用于多个 onClick 函数

ios - 在详细信息标题栏中,显示 “Picture X of Y”

ios - 如何禁用 UITabBarController 中的选项卡?

ios - 如何显示 View 覆盖另一个 View 并更改 View 大小

json - 当响应是对象数组时,如何在抖动中解析JSON

javascript - 理解 React useState() 钩子(Hook)

javascript - 使用状态和回调函数

ios - 如何在 Safari iOS 中启用从深层链接启动应用程序