如何在Flutter的Snackbar组件中展示API返回的JSON响应数据?
Flutter 在Snackbar中展示API响应JSON数据的实现方法
问题核心原因
你的代码取值失败是两个问题导致的:
- 字段大小写不匹配:你要取的
EncUserId在原JSON中首字母大写,且嵌套在UserData节点下,直接写jsonResponse['encUserId']无法匹配到正确字段 - 你已经封装了
ApiResponseModel类,无需重复解码JSON,直接用Model类取值更安全,可避免拼写错误导致的空值问题
实现方案
方案1:直接从解码后的JSON Map取值
// 仅展示EncUserId ScaffoldMessenger.of(context) .showSnackBar(SnackBar(content:Text("用户ID: ${jsonResponse['UserData']['EncUserId']}"))); // 展示完整JSON响应内容 ScaffoldMessenger.of(context) .showSnackBar(SnackBar(content:Text("完整响应: ${jsonEncode(jsonResponse)}")));
方案2:通过已封装的ApiResponse Model类取值(更推荐)
利用你已经写好的Model类做类型校验和空值兼容,避免运行时崩溃:
// 直接把解码后的JSON转成Model对象,无需重复解码 ApiResponse res = ApiResponse.fromJson(jsonResponse); ScaffoldMessenger.of(context) .showSnackBar(SnackBar( content: Text("状态:${res.status},提示:${res.message},用户ID:${res.userData?.encUserId ?? '无'}") ));
注意事项
- Dart中Map的key大小写完全敏感,必须和返回的JSON字段名完全一致才能正确取值
- 嵌套层级的字段需要逐层访问,不能跳过外层节点直接取内层字段
userData为可空类型,取值时用?.做判空处理,搭配??设置默认值可避免空指针异常
内容的提问来源于stack exchange,提问作者Tuhin
相关产品推荐
相关产品推荐

