Flutter从第二个页面返回时获取返回值并转换类型的方法
解决Flutter页面跳转返回值的类型转换与计算问题
Navigator.push返回的是Future类型,这是因为页面跳转属于异步操作,没法直接同步拿到第二个页面的返回值。要实现100加上返回值的计算,得用异步方式处理Future,下面给两种常用的解决办法:
方法一:使用async/await
把onPressed标记为async函数,用await等待Future完成,就能拿到返回的int值:
IconButton( onPressed: () async { final result = await Navigator.of(context) .push(MaterialPageRoute(builder: (context) { return SecondScreen(); })); // 加个类型判断,避免用户按系统返回键时result为null导致报错 if (result is int) { print(100 + result); } }, icon: Icon(Icons.arrow_forward_ios) )
方法二:使用Future.then()
通过then方法注册回调,在Future完成后处理返回值:
IconButton( onPressed: () { Navigator.of(context) .push(MaterialPageRoute(builder: (context) { return SecondScreen(); })).then((result) { if (result is int) { print(100 + result); } }); }, icon: Icon(Icons.arrow_forward_ios) )
注意:如果用户按系统返回键(不是点击你的IconButton),pop不会传入参数,此时result会是null,所以一定要加类型判断或者null检查,避免程序崩溃。
内容的提问来源于stack exchange,提问作者user22362195
相关产品推荐
相关产品推荐

