【问题标题】:setState is not working iqual on iOS than AndroidsetState 在 iOS 上与 Android 上的工作不一样
【发布时间】:2019-05-12 09:29:53
【问题描述】:

我正在做一些共享偏好的收费信息,但在 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');
    });
}

在安卓中运行良好,但在 iOS 中不行

【问题讨论】:

    标签: ios flutter setstate


    【解决方案1】:

    我认为更新文本字段值的正确方法是使用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
    );
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多