如何从FlutterContacts获取的联系人列表中提取指定属性?
只保留FlutterContacts联系人的显示名称、电话和邮箱属性
你可以通过映射原始Contact对象到自定义简化数据类的方式,只保留需要的属性,过滤掉冗余字段。具体步骤如下:
- 定义一个只包含目标属性的自定义类(类型更安全,也可以用Map替代):
class SimplifiedContact { final String displayName; final List<String> phoneNumbers; final List<String> emails; SimplifiedContact({ required this.displayName, required this.phoneNumbers, required this.emails, }); }
- 遍历获取到的原始联系人列表,提取需要的字段并转换为简化类实例:
// 获取原始联系人列表 List<Contact>? contactsList = await FlutterContacts.getContacts( withProperties: true, withPhoto: false, ); // 转换为仅含目标属性的简化列表 List<SimplifiedContact>? simplifiedContacts; if (contactsList != null) { simplifiedContacts = contactsList.map((contact) { // 提取所有电话号码的字符串值 final phones = contact.phones.map((phone) => phone.number).toList(); // 提取所有邮箱地址的字符串值 final emails = contact.emails.map((email) => email.address).toList(); return SimplifiedContact( displayName: contact.displayName, phoneNumbers: phones, emails: emails, ); }).toList(); }
说明
- 转换后的
simplifiedContacts列表仅包含你需要的显示名称、电话号码和邮箱,其他属性(如地址、组织、生日等)都会被自动忽略。 - 如果某个联系人没有电话或邮箱,对应的列表会是空数组,不会出现空值异常。
- 若不需要强类型,也可以直接用
Map<String, dynamic>存储每个简化后的联系人,但自定义类能提供更好的类型检查和代码可读性。
内容的提问来源于stack exchange,提问作者Satya
相关产品推荐
相关产品推荐

