Dart/Flutter解析嵌套JSON对象数组,仅显示单个数据问题排查
排查步骤及解决方案
1. 验证JSON解析与模型映射
- 检查Dart模型类是否正确对应嵌套JSON结构,确保Test2所在的数组/对象被正确解析为列表属性:
// 示例模型类,需匹配实际JSON结构 class TestGroup { final List<TestItem> items; TestGroup({required this.items}); factory TestGroup.fromJson(Map<String, dynamic> json) { return TestGroup( items: List<TestItem>.from(json['items'].map((x) => TestItem.fromJson(x))), ); } } class TestItem { final String name; TestItem({required this.name}); factory TestItem.fromJson(Map<String, dynamic> json) { return TestItem(name: json['name']); } } - 打印API返回的
response.body,确认JSON中确实包含Test2的数据,排除后端返回缺失的情况。
2. 检查列表数据源赋值
- 确认刷新回调中是否将解析后的完整数据赋值给列表,而非仅取第一个元素:
void _onRefresh() async { final response = await http.get(Uri.parse('你的API地址')); final testGroup = TestGroup.fromJson(jsonDecode(response.body)); setState(() { _testItems = testGroup.items; // 赋值整个列表,而非testGroup.items[0] }); _refreshController.refreshCompleted(); } - 打印
_testItems.length,确认数据源包含2条及以上数据。
3. 排查列表渲染逻辑
- 确保
ListView.builder的itemCount设置为数据源长度,而非硬编码为1:Widget _buildTestList() { return ListView.builder( itemCount: _testItems.length, // 此处必须是列表实际长度 itemBuilder: (context, index) { return ListTile(title: Text(_testItems[index].name)); }, ); } - 检查是否存在条件过滤代码(如
if (index == 0)),导致Test2被隐藏。
4. 确认pull_to_refresh_flutter3组件配置
- 确保
PullToRefresh正确包裹列表组件,未因高度限制导致Test2被遮挡:@override Widget build(BuildContext context) { return Scaffold( body: PullToRefresh( controller: _refreshController, onRefresh: _onRefresh, child: _buildTestList(), ), ); }
内容的提问来源于stack exchange,提问作者fisi-pjm
相关产品推荐
相关产品推荐

