Flutter获取RTDB嵌套数据遇双重数组取值问题求助
问题解决方法
问题原因
你构建的allSolversPowId是二维数组(每个元素对应一个用户的工单ID列表),但嵌套循环逻辑错误:内层循环遍历的是allSolversPowId的长度(用户数量),导致用整个工单列表作为键去访问powData,自然返回null。
方案1:修正原有循环逻辑
调整内层循环,遍历当前用户对应的工单ID列表,而非allSolversPowId的整体长度:
List solversId = powData.keys.toList(); List<List<String>> allSolversPowId = []; // 先收集每个用户的工单ID列表 for(int i =0; i < solversId.length; i++){ allSolversPowId.add(powData[solversId[i]].keys.cast<String>().toList()); } // 嵌套循环修正:内层遍历当前用户的工单ID for(int i = 0; i < solversId.length; i++) { // 获取当前用户的所有工单ID List<String> currentUserTickets = allSolversPowId[i]; for (int j = 0; j < currentUserTickets.length; j++) { String ticketId = currentUserTickets[j]; calledWidget.add( ReusablePositionWidget( onTap: (){}, child: Column( children: [ // 加上空安全处理,避免数据为空时崩溃 Text(powData[solversId[i]][ticketId]['Title_text'] ?? '暂无标题') ], ) ) ); } }
方案2:用forEach简化遍历(更推荐)
直接遍历powData的键值对,无需手动处理列表,代码更简洁直观:
powData.forEach((userId, userTickets) { userTickets.forEach((ticketId, ticketData) { calledWidget.add( ReusablePositionWidget( onTap: () {}, child: Column( children: [ Text(ticketData['Title_text'] ?? '暂无标题'), // 如果需要显示图片,可添加如下代码(根据实际图片类型调整) // ticketData['Title_picture'] != null // ? Image.network(ticketData['Title_picture']) // : SizedBox.shrink(), ], ), ), ); }); });
内容的提问来源于stack exchange,提问作者Kim San
相关产品推荐
相关产品推荐

