Asynchronous 如何确定未来<;布尔>;使用共享首选项库时颤振省道中的vs bool错误?

Asynchronous 如何确定未来<;布尔>;使用共享首选项库时颤振省道中的vs bool错误?,asynchronous,flutter,dart,Asynchronous,Flutter,Dart,我对flatter还很陌生,而且我对异步编码几乎没有经验,所以我很难将我读过的文章应用到我当前的代码中。我试图保存开关是否已切换的值,并使用该值确定其状态。如何修复未来bool vs bool错误 Widget learn(BuildContext context){ bool isSwitched = _read(); return Center( child: Switch( value: isSwitched, onChanged: (value)

我对flatter还很陌生,而且我对异步编码几乎没有经验,所以我很难将我读过的文章应用到我当前的代码中。我试图保存开关是否已切换的值,并使用该值确定其状态。如何修复未来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);
}
Widget学习(构建上下文){
bool isSwitched=_read();
返回中心(
孩子:开关(
值:已切换,
一旦更改:(值){
_保存(价值);
打印(isSwitched);
},
activeTrackColor:Colors.lightGreenAccent,
activeColor:Colors.green,
),
);
}
Future\u read()异步{
final prefs=wait SharedPreferences.getInstance();
最终键='isSwitched';
最终值=prefs.getBool(键)??错误;
返回值;
}
_保存(bool boo)异步{
final prefs=wait SharedPreferences.getInstance();
最终键='isSwitched';
最终值=boo;
prefs.setBool(键、值);
}

您的\u read返回一个未来,但您的已切换是一个布尔

然后您可以使用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();
          }
        },
      ),
    );
  }

谢谢你的及时帮助。不幸的是,当我把它变成一个异步函数时,“learn(BuildContext){”返回了一个Future,这导致了一个错误。我该如何修复这个问题?