这可能是一个愚蠢的问题,但是我的问题是,我有一个Future的返回值,我想为其分配一个变量,但是该变量仅在“代码块”中保持不变
我想同步返回值
bool getDarkMode() {
bool testBool;
test().then((myBool) {
testBool = myBool;
});
return testBool;
}
我想返回testBool
变量的值。
答案 0 :(得分:0)
Future<bool> getDarkMode() async {
bool testBool = await test();
return testBool;
}
或者您可以消除testBool
并使用
Future<bool> getDarkMode() async{
return await test();
}
答案 1 :(得分:0)
使用then
表示test()
返回一个Future。这意味着您不能以同步方式使用它。 (假设test
具有以下签名:Future<bool> test() { ... }
您还需要通过异步使函数getDarkMode
变为:
Future<bool> getDarkMode() {
return test();
}
或者如果您需要处理test
的结果:
Future<bool> getDarkMode() async {
bool res = await test();
return res;
}
无法将异步值“转换”为同步值。
如果在小部件的构建方法中需要此值,则可以使用FutureBuilder
:
Widget build(BuildContext context) {
return FutureBuilder<bool>(
future: getDarkMode(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text('Loading...');
}
final darkMode = snapshot.data;
return Text(darkMode ? 'DARK' : 'LIGHT');
},
);
}