Как исправить ошибку Future <bool>vs bool в трепетании дротиков при использовании библиотеки общих настроек? - PullRequest
0 голосов
/ 17 марта 2020

Я довольно плохо знаком с флаттером, и у меня мало опыта в асинхронном кодировании, поэтому мне было трудно применить статьи, которые я прочитал, к моему текущему коду. Я пытаюсь сохранить значение для того, переключен ли коммутатор, и использовать это, чтобы определить его состояние. Как я могу исправить ошибку Future bool vs bool?

Widget learn(BuildContext context){
  bool isSwitched = _read();
  return Center(
    child: Switch(
      value: isSwitched,
      onChanged: (value) {
          _save(value);
          print(isSwitched);
      },
      activeTrackColor: Colors.lightGreenAccent,
      activeColor: Colors.green,
    ),
  );
}

Future<bool> _read() async {
  final prefs = await SharedPreferences.getInstance();
  final key = 'isSwitched';
  final value = prefs.getBool(key) ?? false;
  return value;
}

_save(bool boo) async {
  final prefs = await SharedPreferences.getInstance();
  final key = 'isSwitched';
  final value = boo;
  prefs.setBool(key, value);
}

1 Ответ

0 голосов
/ 17 марта 2020

Ваш _read возвращает Future , но ваш isSwitched является bool ...

Вы можете использовать FutureBuilder , затем

  Widget learn(BuildContext context){
    return Center(
      child: FutureBuilder(
        future: _read(),
        builder: (context, snapshot){
          if(snapshot.hasData){
            return Switch(
              value: snapshot.data,
              onChanged: (value) {
                _save(value);
                print(snapshot.data);
              },
              activeTrackColor: Colors.lightGreenAccent,
              activeColor: Colors.green,
            );
          }else{
            return CircularProgressIndicator();
          }
        },
      ),
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...