You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:10:32