字节笔记本

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.vCardvCard 导入导出
FlutterContacts.native原生对话框
FlutterContacts.config配置选项

平台专属 API

API平台说明
FlutterContacts.simAndroidSIM 卡联系人
FlutterContacts.profileAndroid/macOS用户个人资料
FlutterContacts.blockedNumbersAndroid黑名单管理
FlutterContacts.ringtonesAndroid铃声设置

性能基准测试

在真实设备上(iPhone 7、Pixel 6)使用约 2,000 个联系人进行测试:

操作iOS 性能提升Android 性能提升
读取速度1.6-7x 更快2-5x 更快
批量创建4x 更快5x 更快
批量删除34x 更快140x 更快

从 v1 迁移到 v2

v1 APIv2 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)

项目链接

许可证

MIT License

分享: