我的未来未使用FutureBuilder执行

时间:2019-11-16 18:35:32

标签: flutter dart

我正在尝试使用FutureBuilder,但我正在解决一个问题,我的未来被调用但未执行。而且我不明白为什么。有人知道为什么吗?

这是我的代码:


class TesPage extends StatefulWidget {
  @override
  _TesPageState createState() => _TesPageState();
}

class _TesPageState extends State<TesPage> {
  Future<String> future;
  Future<String> futureFunction() async {
    try {
      await text(); 
      return "Test"; // this is never called
    } catch (e) {
      return e.toString();
    }
  }

  @override
  @mustCallSuper
  void initState() {
    future = futureFunction();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: new FutureBuilder<String>(
        future: future,
        builder: (BuildContext context, snapshot) {
          // returning a widget based on the future
        },
      ),
    );
  }
}

谢谢!

更新 修复我的代码示例

1 个答案:

答案 0 :(得分:0)

您没有正确地等待Future被解决。 我建议您采用以下方式:

class TesPage extends StatefulWidget {
  @override
  _TesPageState createState() => _TesPageState();
}

class _TesPageState extends State<TesPage> {
//Future<String> future;
  Future<String> futureFunction() async {
    try {
      await text(); 
      return "Test"; // this is never called
    } catch (e) {
      return e.toString();
    }
  }

  //@override
  //@mustCallSuper
  //void initState() {
  //  future = futureFunction();
  //  super.initState();
  //}

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: new FutureBuilder<String>(
        future: futureFunction(),
        builder: (BuildContext context, snapshot) {
            // returning a widget based on the future 
        },
      ),
    );
  }
}

我已经评论了未使用的语句和变量 这样FutureBuilder将调用futureFunction并等待其结果。

请注意snapshot可能处于的状态,请检查this以获取完整信息。

通常,您只可以检查是否snapshot.hasData,但是该类为您提供了有关async计算状态(在这种情况下也称为futureFunction)的更多信息。