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

1 回复

更多关于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.xmlInfo.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'),
          );
        },
      ),
    );
  }
}
回到顶部