如何根据异步调用的结果使用Navigator?

时间:2019-09-10 14:35:46

标签: asynchronous flutter dart

我想根据异步调用的返回进行导航。

首先,我在Future Builder快照中使用了Navigator.push。

FutureBuilder<String> fB = FutureBuilder<String>(
  future: func1(),  
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      Navigator.pushNamed(context, '/index');
    } else if (snapshot.hasError)
      return Text(snapshot.error.toString());
    return CircularProgressIndicator();//
  },
);

但是我有一个错误消息,那就是该小部件是在其父级之前构建的。

然后我尝试根据FutureBuilder的结果进行推送。

FutureBuilder<String> fB = FutureBuilder<String>(
  future: func1(),
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      return Text("sucess");
    } else if (snapshot.hasError)
      return Text(snapshot.error.toString());
    return CircularProgressIndicator();
  },
);

if(test)Scaffold.of(context).showSnackBar(new SnackBar(content:fB));     else Navigator.pushNamed(context,'/ index');

我怎么知道提供推送是否成功(测试是什么)?

1 个答案:

答案 0 :(得分:0)

它与.then()方法一起使用。

FutureBuilder<String> fB = FutureBuilder<String>(
  future: func1().then((response) {
    Navigator.pushNamed(context, '/index');
    return response;
  }),  
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      return null;
    } else if (snapshot.hasError)
      return Text(snapshot.error.toString());
    return CircularProgressIndicator();
  },
);
相关问题