dart - 异步方法返回响应后如何导航不同的页面
问题描述
我有一个屏幕应用程序,其中我有 MaterialApp 的 onGenerateRoute 属性。在路由方法中,我进行了 api 调用,一旦我得到响应,我想让用户导航到登录屏幕
我尝试在 .then() 函数中调用我的小部件登录
class App extends StatelessWidget {
Widget build(BuildContext context) {
return AppBlocProvider(
child: LoginBlocProvider(
child: MaterialApp(
onGenerateRoute: routes,
),
),
);
}
Route routes(RouteSettings settings) {
print(settings.name);
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (context) {
//HERE I AM MAKING API CALL
final appBloc = AppBlocProvider.of(context);
appBloc.verifyUser().then((response) {
//HERE ONCE I GET THE RESPONSE I WANT TO NAVIGATE USER TO
//lOGIN ACTIVITY
print('called');
return Login();
});
return AppBlocProvider(
child: Center(child: CircularProgressIndicator()),
);
});
break;
case '/Login':
return MaterialPageRoute(builder: (BuildContext context) {
return Login();
});
break;
case '/HomeScreen':
return MaterialPageRoute(builder: (BuildContext context) {
return Home();
});
break;
}
return MaterialPageRoute(builder: (context) {
print('returned null');
});
}
api 调用成功,甚至 .then() 方法执行但登录屏幕没有出现
解决方案
没有做任何事情的原因return Login();
是因为已经执行了另一个返回:return AppBlocProvider(child: Widget());
与此示例类似,由于已经进行了退货,因此其他退货不会做任何事情。示例打印“bar”,而“foo”从未使用print(bar());
.
void main() {
print(bar());
}
Future<String> foo() async{
await Future.delayed(Duration(seconds: 5));
return 'foo';
}
String bar(){
String txt = 'bar';
foo().then((String value){
print('Future finished: $value');
// Since print already got a String return,
// returning this value won't do anything
return value; // 'foo' won't be printed on main()
});
return txt;
}
您可能需要考虑在 Login 中移动导航并在那里显示 CircularProgressIndicator()。
推荐阅读
- javascript - 如何将 Reactjs 与 Nodejs 一起使用,以发送 html(组件)以响应 API
- javascript - 选择其他选择下拉菜单的选项
- java - java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法,而它不是空的
- python - 如何在 yocto 图像中包含 python pex 包
- c# - 如何在 C# 中关闭控制台时执行功能
- reactjs - 执行失败:'app:compileDebugJavaWithJavac FAILED' -ReactNative
- flutter - Flutter 驱动:如何只运行一组或测试
- geoserver - 使用 GeoTiff 文件的文件夹作为存储
- python - 将 RGB 视频转换为灰度视频以减小文件大小
- javascript - 根据页面上的光标位置更改图像