声明变量为未来的返回值

时间:2019-08-14 13:19:41

标签: flutter dart

这可能是一个愚蠢的问题,但是我的问题是,我有一个Future的返回值,我想为其分配一个变量,但是该变量仅在“代码块”中保持不变

我想同步返回值

bool getDarkMode() {
    bool testBool;

    test().then((myBool) {
      testBool = myBool;
    });
    return testBool;
  }

我想返回testBool变量的值。

2 个答案:

答案 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');
    },
  );
}