setState не работает одинаково на iOS, чем на Android - PullRequest
0 голосов
/ 12 мая 2019

Я делаю некоторую информацию о платеже с общими настройками, но в 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');
    });
}

В андроиде работает хорошо, но не в iOS

1 Ответ

0 голосов
/ 13 мая 2019

Я думаю, что правильный способ обновить значение текстовых полей - это использовать 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
);

...