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

Asynchronous 如何根据异步调用的结果使用Navigator?,asynchronous,flutter,dart,Asynchronous,Flutter,Dart,我希望根据异步调用的返回进行导航 首先,我在未来的构建器快照中使用了Navigator.push FutureBuilder<String> fB = FutureBuilder<String>( future: func1(), builder: (context, snapshot) { if (snapshot.hasData) { Navigator.pushNamed(context, '/index'); } else

我希望根据异步调用的返回进行导航

首先,我在未来的构建器快照中使用了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 fB=FutureBuilder(
future:func1(),
生成器:(上下文,快照){
if(snapshot.hasData){
pushNamed(上下文“/index”);
}else if(snapshot.hasrerror)
返回文本(snapshot.error.toString());
返回循环ProgressIndicator()//
},
);
但是我有一个错误告诉他小部件是在他父母之前构建的

然后我试着根据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();
  },
);
FutureBuilder fB=FutureBuilder(
future:func1(),
生成器:(上下文,快照){
if(snapshot.hasData){
返回文本(“成功”);
}else if(snapshot.hasrerror)
返回文本(snapshot.error.toString());
返回循环ProgressIndicator();
},
);
if(测试)Scaffold.of(context.showSnackBar(新SnackBar(内容:fB)); else Navigator.pushNamed(上下文“/index”)

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

它与.then()方法一起工作

FutureBuilder fB=FutureBuilder(
future:func1()。然后((响应){
pushNamed(上下文“/index”);
返回响应;
}),  
生成器:(上下文,快照){
if(snapshot.hasData){
返回null;
}else if(snapshot.hasrerror)
返回文本(snapshot.error.toString());
返回循环ProgressIndicator();
},
);

或使用
WidgetsBinding
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();
  },
);