Flutter中API获取指定字段传递至下页报错,求解决方案
问题解决方法
你的核心问题是异步函数调用未等待结果,且传递的对象不是你需要的unit_name值,而是Future实例。以下是具体修正步骤:
1. 优化异步函数,直接返回目标值
修改signIn函数,让它直接返回你需要的unit_name字符串,而非整个Response对象,减少后续解析步骤:
Future<String?> signIn() async { var dio = Dio(); try { var response = await dio.post('https://cisfapp.cisf.gov.in/abc/post.php', data: { "method" : "posting", "username" : 1652356789 }, options: Options( headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' } )); Map mapResponse = jsonDecode(response.data); var unitName = mapResponse['data'][2]['unit_name']; print(unitName); return unitName; // 直接返回需要的unit_name } catch (e) { print(e.toString()); return null; } }
2. 等待异步结果后再跳转
因为signIn是异步函数,必须用await等待它执行完成,才能拿到实际的unit_name值,再传递给下一页:
// 把这段逻辑放在触发跳转的地方(比如按钮的onPressed) onPressed: () async { // 等待异步函数返回结果 var targetUnitName = await signIn(); // 确保获取到有效值再跳转 if (targetUnitName != null) { Navigator.of(context).push( MaterialPageRoute( builder: (context) => posting(targetUnitName), ), ); } },
关键原因说明
async标记的函数会返回一个Future对象,直接赋值给变量得到的是未完成的异步任务实例,而非最终结果,必须用await等待任务完成才能拿到实际返回值。- 直接返回
unit_name而非整个Response,既符合你的需求,也避免在跳转后重复解析数据,提升代码效率。
内容的提问来源于stack exchange,提问作者suman singh
相关产品推荐
相关产品推荐

