Flutter联系人管理插件contacts_provider的使用
Flutter联系人管理插件contacts_provider的使用
在Flutter中,contacts_provider
是一个非常有用的插件,用于管理和访问设备上的联系人信息。以下是使用该插件的基本步骤和示例代码。
在Android清单文件中添加权限
首先,在 AndroidManifest.xml
文件中添加读写联系人的权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
手动初始化
在 main.dart
文件中手动初始化 contacts_provider
并请求权限。你可以根据需要在其他位置请求权限,这里只是为了演示。
import 'package:flutter/material.dart';
import 'package:contacts_provider/contacts_provider.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化contacts_provider
final contacts = Contacts();
await contacts.handlePermissions();
await contacts.init();
runApp(const MainApp());
}
使用 ContactsBuilder
在 home.dart
文件中,使用 ContactsBuilder
来构建联系人列表。ContactsBuilder
提供了创建、更新、删除事件的回调方法,并允许你根据最新的联系人列表来构建UI。
import 'package:flutter/material.dart';
import 'package:contacts_provider/contacts_provider.dart';
class HomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return ContactsBuilder(
onCreate: (event) {
// 创建行为处理
print("New contact added.");
print("New contact list: ${event.contactList}");
print("Created contacts: ${event.effectedContacts}");
print("Event type: ${event.event}");
},
onUpdate: (event) {
// 更新行为处理
print("Contact updated.");
},
onDelete: (event) {
// 删除行为处理
print("Contact deleted.");
},
onChange: () {
// 当联系人列表发生变化时执行
print("Contacts list changed.");
},
builder: (context, allLatestContacts) {
// 接收最新的联系人列表
return ListView.builder(
itemCount: allLatestContacts.length,
itemBuilder: (BuildContext context, int index) {
final contact = allLatestContacts[index];
return ContactListTile(contact: contact);
},
);
},
);
}
}
使用 ContactsProvider 初始化
如果你希望在整个应用范围内使用 contacts_provider
,可以使用 ContactsProvider
来进行初始化。这将使整个应用能够访问联系人数据。
import 'package:flutter/material.dart';
import 'package:contacts_provider/contacts_provider.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Contacts.handlePermissions();
runApp(const MainApp());
}
class MainApp extends StatelessWidget {
const MainApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return ContactsProvider(
child: MaterialApp(
home: Scaffold(
body: Center(
child: HomePage(),
),
),
),
);
}
}
更多关于Flutter联系人管理插件contacts_provider的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter联系人管理插件contacts_provider的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
contacts_provider
是一个用于在 Flutter 应用中管理和访问设备联系人信息的插件。它提供了简单的 API,允许开发者读取、添加、更新和删除联系人信息。以下是如何使用 contacts_provider
插件的基本步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 contacts_provider
插件的依赖。
dependencies:
flutter:
sdk: flutter
contacts_provider: ^0.1.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 请求权限
在访问联系人信息之前,你需要在 AndroidManifest.xml
和 Info.plist
文件中添加相应的权限声明。
Android:
在 android/app/src/main/AndroidManifest.xml
中添加以下权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
iOS:
在 ios/Runner/Info.plist
中添加以下键值对:
<key>NSContactsUsageDescription</key>
<string>我们需要访问您的联系人以便管理联系人信息</string>
3. 使用 contacts_provider
接下来,你可以在 Flutter 代码中使用 contacts_provider
来管理联系人。
获取联系人列表
import 'package:contacts_provider/contacts_provider.dart';
Future<void> getContacts() async {
// 请求权限
bool hasPermission = await ContactsProvider.requestPermission();
if (!hasPermission) {
print('Permission denied');
return;
}
// 获取联系人列表
List<Contact> contacts = await ContactsProvider.getContacts();
for (var contact in contacts) {
print('Contact: ${contact.displayName}, Phone: ${contact.phones.first}');
}
}
添加联系人
Future<void> addContact() async {
bool hasPermission = await ContactsProvider.requestPermission();
if (!hasPermission) {
print('Permission denied');
return;
}
Contact newContact = Contact(
displayName: 'John Doe',
phones: [Phone(number: '1234567890')],
);
await ContactsProvider.addContact(newContact);
print('Contact added successfully');
}
更新联系人
Future<void> updateContact() async {
bool hasPermission = await ContactsProvider.requestPermission();
if (!hasPermission) {
print('Permission denied');
return;
}
// 首先获取联系人列表
List<Contact> contacts = await ContactsProvider.getContacts();
if (contacts.isNotEmpty) {
Contact contactToUpdate = contacts.first;
contactToUpdate.displayName = 'Jane Doe';
await ContactsProvider.updateContact(contactToUpdate);
print('Contact updated successfully');
}
}
删除联系人
Future<void> deleteContact() async {
bool hasPermission = await ContactsProvider.requestPermission();
if (!hasPermission) {
print('Permission denied');
return;
}
// 首先获取联系人列表
List<Contact> contacts = await ContactsProvider.getContacts();
if (contacts.isNotEmpty) {
Contact contactToDelete = contacts.first;
await ContactsProvider.deleteContact(contactToDelete);
print('Contact deleted successfully');
}
}
4. 处理权限请求
在 Android 和 iOS 上,访问联系人需要用户授权。你可以使用 permission_handler
插件来请求和管理权限。
import 'package:permission_handler/permission_handler.dart';
Future<void> checkPermissions() async {
var status = await Permission.contacts.status;
if (!status.isGranted) {
await Permission.contacts.request();
}
}
5. 完整示例
import 'package:flutter/material.dart';
import 'package:contacts_provider/contacts_provider.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: ContactsScreen(),
);
}
}
class ContactsScreen extends StatefulWidget {
[@override](/user/override)
_ContactsScreenState createState() => _ContactsScreenState();
}
class _ContactsScreenState extends State<ContactsScreen> {
List<Contact> contacts = [];
[@override](/user/override)
void initState() {
super.initState();
getContacts();
}
Future<void> getContacts() async {
var status = await Permission.contacts.status;
if (!status.isGranted) {
await Permission.contacts.request();
}
if (status.isGranted) {
List<Contact> fetchedContacts = await ContactsProvider.getContacts();
setState(() {
contacts = fetchedContacts;
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Contacts'),
),
body: ListView.builder(
itemCount: contacts.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(contacts[index].displayName ?? 'No Name'),
subtitle: Text(contacts[index].phones.isNotEmpty ? contacts[index].phones.first.number : 'No Phone'),
);
},
),
);
}
}