Flutter跨页面传值异常:打印Future实例而非目标数组数据
问题解决方法
你遇到的核心问题是没有等待Future完成就直接赋值,Navigator.push返回的是一个Future对象,它代表异步操作的结果,必须用await关键字获取实际返回值。
修改第一个页面代码
把firstActionData的赋值加上await,利用函数已有的async标识完成异步等待:
void _openAddEntryDialog(String futureProjectName) async { // 添加await获取Future的实际返回结果 final firstActionData = await Navigator.of(context).push(MaterialPageRoute<List<String>>( builder: (BuildContext context) { return AddingFirstActionToProjectV2(getprojectName: futureProjectName); }, fullscreenDialog: true )); setState(() { dataFromFirstAction = firstActionData; print('firstActionData'); // 现在可以直接打印数组内容 print(dataFromFirstAction); }); }
关键说明
await会暂停当前函数执行,直到第二个页面关闭并传回数据,此时firstActionData就是你需要的List<String>数组。- 原代码直接将
Future对象赋值给dataFromFirstAction,所以打印时显示的是Instance of 'Future<List<String>?> ',而非实际数组内容。
额外优化建议
可以增加空值判断,避免用户直接关闭页面未提交表单导致firstActionData为null的情况:
if (firstActionData != null) { setState(() { dataFromFirstAction = firstActionData; print(dataFromFirstAction); }); }
内容的提问来源于stack exchange,提问作者Laurent Thomas
相关产品推荐
相关产品推荐

