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

Flutter开发WhatsApp克隆:状态展示出现Firebase数据获取RangeError

问题原因与修复方案

错误根源

报错RangeError (index): Invalid value: Valid value range is empty: 0是因为代码直接访问了联系人的phones[0],但部分联系人可能未存储电话号码,导致phones列表为空,访问索引0时触发数组越界错误。

修复后的完整代码

Future<List> getStatus(BuildContext context) async {
  List statusData = [];

  try {
    List<Contact> contacts = [];
    if (await FlutterContacts.requestPermission()) {
      contacts = await FlutterContacts.getContacts(withProperties: true);
    }

    for (int i = 0; i < contacts.length; i++) {
      // 跳过无电话号码的联系人,避免空列表索引越界
      if (contacts[i].phones.isEmpty) continue;

      var statusesSnapshot = await firestore
          .collection('status')
          .where(
            'phoneNumber',
            isEqualTo: contacts[i].phones[0].number.replaceAll(
                  ' ',
                  '',
                ),
          )
          .where(
            'createdAt',
            isGreaterThan: DateTime.now()
                .subtract(const Duration(hours: 24))
                .microsecondsSinceEpoch,
          )
          .get();

      for (var tempData in statusesSnapshot.docs) {
        Status tempStatus = Status.fromMap(tempData.data());
        if (tempStatus.whoCanSee.contains(auth.currentUser!.uid)) {
          statusData.add(tempStatus);
        }
      }
    }
  } catch (e) {
    if (kDebugMode) print(e);
    showSnackBar(context: context, content: e.toString());
  }
  return statusData;
}

核心修复说明

  • 新增if (contacts[i].phones.isEmpty) continue;判断,直接跳过没有电话号码的联系人,从根源避免空列表索引访问错误。
  • 若业务需要处理多号码联系人,可在此基础上扩展逻辑(比如遍历所有号码查询状态),但跳过空号码联系人是最直接的修复方式。

内容的提问来源于stack exchange,提问作者safad tm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:45:34