字
字节笔记本
2026年2月22日
flutter_contacts:高性能 Flutter 联系人管理插件
本文介绍 flutter_contacts,一个高性能、功能完整的 Flutter 联系人管理插件。该插件提供了全面的联系人操作能力,包括读取、创建、更新、删除联系人,支持群组管理、vCard 导入导出、原生对话框等功能,是目前 Flutter 生态中最快的联系人插件。
项目简介
flutter_contacts 是由 QuisApp 开发维护的开源 Flutter 插件,专注于提供高性能的本地联系人管理能力。截至目前,该项目在 GitHub 上已获得 101+ stars,主要使用 Kotlin (39.5%)、Dart (30.3%) 和 Swift (28.0%) 编写。
该插件支持 Android、iOS 和 macOS 三大平台,通过优化的原生代码实现,在性能基准测试中表现优异:读取速度比同类插件快 1.6-7 倍,批量操作速度提升最高达 140 倍。
核心特性
- 🏆 极致性能:读取速度提升 1.6-7 倍,批量创建快 4-5 倍,批量删除快 34-140 倍
- 📈 大规模数据处理:通过批处理操作流畅处理 10,000+ 联系人
- 🛡️ 完整读写支持:全面的联系人属性读写能力
- 🔍 高效筛选:支持按姓名、电话、邮箱、群组等多维度筛选
- 👥 多账户与群组:完整的账户管理和群组功能
- 📇 vCard 支持:完整的 vCard 导入/导出功能,支持所有属性格式
- 🔔 实时监听:联系人数据库变更实时通知
- 🎨 原生对话框:支持系统原生的联系人选择、查看、编辑界面
- 📱 Android 专属 API:支持黑名单、铃声设置、SIM 卡联系人等
技术栈
- Kotlin (39.5%) - Android 平台原生实现
- Dart (30.3%) - Flutter 插件接口和业务逻辑
- Swift (28.0%) - iOS/macOS 平台原生实现
- Shell (1.6%) - 构建和发布脚本
安装指南
添加依赖
在 pubspec.yaml 中添加:
yaml
dependencies:
flutter_contacts: ^2.0.0配置权限
Android (android/app/src/main/AndroidManifest.xml):
xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>iOS (ios/Runner/Info.plist):
xml
<key>NSContactsUsageDescription</key>
<string>我们需要访问您的联系人...</string>快速开始
dart
import 'package:flutter_contacts/flutter_contacts.dart';
// 请求权限
final status = await FlutterContacts.permissions.request(
PermissionType.readWrite,
);
if (status == PermissionStatus.granted) {
// 获取所有联系人(默认只获取 ID 和显示名称)
List<Contact> contacts = await FlutterContacts.getAll();
// 获取指定联系人的所有属性
Contact? contact = await FlutterContacts.get(
contacts.first.id!,
properties: ContactProperties.all,
);
}使用示例
场景 1:联系人列表展示
dart
// 列表视图:只获取缩略图,提高性能
final contacts = await FlutterContacts.getAll(
properties: {ContactProperty.photoThumbnail},
);
// 渲染联系人列表
ListView.builder(
itemCount: contacts.length,
itemBuilder: (context, index) {
final contact = contacts[index];
return ListTile(
leading: contact.photoThumbnail != null
? Image.memory(contact.photoThumbnail!)
: CircleAvatar(child: Text(contact.displayName[0])),
title: Text(contact.displayName),
);
},
);场景 2:创建新联系人
dart
final contact = Contact(
name: Name(first: '张', last: '三'),
phones: [Phone('13800138000', label: PhoneLabel.mobile)],
emails: [Email('zhangsan@example.com', label: EmailLabel.work)],
);
final id = await FlutterContacts.create(contact);场景 3:更新联系人
dart
// 先获取联系人(指定需要的属性)
var contact = await FlutterContacts.get(
id,
properties: {ContactProperty.name, ContactProperty.phone},
);
// 更新属性
contact = contact.copyWith(
name: Name(first: '李', last: '四'),
);
// 保存更新
await FlutterContacts.update(contact);场景 4:筛选和搜索
dart
// 按姓名筛选
final results = await FlutterContacts.getAll(
filter: ContactFilter.name('张三'),
limit: 100,
);
// 按手机号筛选(Android 支持部分匹配,iOS 需要完整匹配)
final byPhone = await FlutterContacts.getAll(
filter: ContactFilter.phone('1380013'),
);
// 按群组筛选
final byGroup = await FlutterContacts.getAll(
filter: ContactFilter.group(groupId),
);场景 5:批量操作
dart
// 批量创建
final ids = await FlutterContacts.createAll([contact1, contact2, contact3]);
// 批量更新
await FlutterContacts.updateAll([contact1, contact2]);
// 批量删除
await FlutterContacts.deleteAll([id1, id2, id3]);场景 6:vCard 导入导出
dart
// 导出为 vCard
final vCardString = await FlutterContacts.vCard.export(contact);
// 从 vCard 导入
final importedContacts = await FlutterContacts.vCard.import(vCardString);场景 7:实时监听变更
dart
// 监听数据库变更
FlutterContacts.onDatabaseChange.listen((event) {
print('联系人数据库已变更: ${event.type}');
// 刷新联系人列表
});
// 监听特定联系人变更
FlutterContacts.onContactChange.listen((event) {
print('联系人 ${event.contactId} 已 ${event.type}');
});API 参考
核心 CRUD 操作
| API | 说明 |
|---|---|
FlutterContacts.get(id) | 获取单个联系人 |
FlutterContacts.getAll() | 获取所有联系人 |
FlutterContacts.create(contact) | 创建联系人 |
FlutterContacts.createAll([...]) | 批量创建 |
FlutterContacts.update(contact) | 更新联系人 |
FlutterContacts.updateAll([...]) | 批量更新 |
FlutterContacts.delete(id) | 删除联系人 |
FlutterContacts.deleteAll([...]) | 批量删除 |
功能 API
| API | 说明 |
|---|---|
FlutterContacts.permissions | 权限管理 |
FlutterContacts.accounts | 账户管理 |
FlutterContacts.groups | 群组管理 |
FlutterContacts.vCard | vCard 导入导出 |
FlutterContacts.native | 原生对话框 |
FlutterContacts.config | 配置选项 |
平台专属 API
| API | 平台 | 说明 |
|---|---|---|
FlutterContacts.sim | Android | SIM 卡联系人 |
FlutterContacts.profile | Android/macOS | 用户个人资料 |
FlutterContacts.blockedNumbers | Android | 黑名单管理 |
FlutterContacts.ringtones | Android | 铃声设置 |
性能基准测试
在真实设备上(iPhone 7、Pixel 6)使用约 2,000 个联系人进行测试:
| 操作 | iOS 性能提升 | Android 性能提升 |
|---|---|---|
| 读取速度 | 1.6-7x 更快 | 2-5x 更快 |
| 批量创建 | 4x 更快 | 5x 更快 |
| 批量删除 | 34x 更快 | 140x 更快 |
从 v1 迁移到 v2
| v1 API | v2 API |
|---|---|
FlutterContacts.getContacts() | FlutterContacts.getAll() |
FlutterContacts.getContact(id) | FlutterContacts.get(id) |
contact.insert() | FlutterContacts.create(contact) |
FlutterContacts.requestPermission() | FlutterContacts.permissions.request(...) |
FlutterContacts.addListener() | FlutterContacts.onDatabaseChange.listen() |
contact.toVCard() | FlutterContacts.vCard.export(contact) |
项目链接
- GitHub 仓库:https://github.com/QuisApp/flutter_contacts
- Pub.dev 包:https://pub.dev/packages/flutter_contacts
- 完整示例:https://github.com/QuisApp/flutter_contacts_example
- 性能基准测试:https://github.com/QuisApp/flutter_contacts_benchmark
许可证
MIT License
分享: