RangeError(索引):无效值:有效值范围为空:0 使用 contact.phones!.elementAt(0).value

问题描述 投票:0回答:1

我正在开发一个应用程序,我应该在其中访问用户的联系人。我正在使用 contacts_servicepermission_handler 来访问联系人,这是我的代码:

import 'package:contacts_service/contacts_service.dart';
import 'package:flutter/material.dart';
class HomePage extends StatefulWidget {
  HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {

  List<Contact> contacts = [];
  @override
  void initState() {
    super.initState();
    getAllContacts();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView.builder(
              itemCount: contacts.length,
              itemBuilder: (_, i) {
                Contact contact = contacts[i];
                return ListTile(
                  title: Text(contact.displayName!),
                  subtitle: Text(contact.phones!.elementAt(0).value.toString()),
                );
          }));
  }

  void getAllContacts() async {
    List<Contact> _contacts = await ContactsService.getContacts(withThumbnails: false);
    setState(() {
      contacts = _contacts;
    });
  }
}

我将以下几行添加到我的 AndroidManifest.xml 中

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />

问题

我收到范围错误:

The following RangeError was thrown building:
RangeError (index): Invalid value: Valid value range is empty: 0

如果我评论

subtitle
部分一切都很好。所以问题是 contact_service 无法获取联系电话号码,我不知道为什么。

有人可以帮助我吗?

我尝试了 flutter_contacts ,我对

getContacts
功能也有同样的问题,但
getContact
工作正常

flutter dart
1个回答
0
投票

如果当你尝试访问

contact.phones!.elementAt(0)
时,它会抛出一个
RangeError
,这意味着该元素不存在。

某些联系人可能没有电话号码。

您应该检查他们是否有电话号码,否则,请退回其他内容。类似于“对未找到的内容进行编号”之类的内容。

类似:

ListTile(
                title: Text(contact.displayName!),
                subtitle: Text(contact.phones != null && contact.phones!.isNotEmpty //check if  contact has phone number has at least one phone number
                    ? contact.phones!.elementAt(0).value.toString()
                    : 'User has no phone number',
              );
            })
© www.soinside.com 2019 - 2024. All rights reserved.