我正在开发一个应用程序,我应该在其中访问用户的联系人。我正在使用 contacts_service 和 permission_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
工作正常
如果当你尝试访问
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',
);
})