Flutter联系人管理插件contacts_androidx_example的使用

Flutter联系人管理插件contacts_androidx_example的使用

在本教程中,我们将展示如何使用Flutter的联系人管理插件contacts_androidx_example来获取设备上的联系人信息。此插件基于contacts_service插件,并支持Android平台。

环境准备

在开始之前,请确保您的开发环境已安装以下内容:

  • Flutter SDK(版本1.20及以上)
  • Android Studio(用于运行和调试Android应用)
  • Android模拟器或真实设备

安装插件

pubspec.yaml文件中添加contacts_androidx_example依赖项:

dependencies:
  contacts_service: ^0.5.0

然后执行以下命令以更新依赖项:

flutter pub get

示例代码

以下是一个完整的示例代码,展示如何使用contacts_androidx_example插件获取并显示联系人列表。

main.dart

import 'package:flutter/material.dart';
import 'package:contacts_service/contacts_service.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ContactListPage(),
    );
  }
}

class ContactListPage extends StatefulWidget {
  [@override](/user/override)
  _ContactListPageState createState() => _ContactListPageState();
}

class _ContactListPageState extends State<ContactListPage> {
  List<Contact> _contacts = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    // 获取联系人列表
    fetchContacts();
  }

  Future<void> fetchContacts() async {
    List<Contact> contacts = (await ContactsService.getContacts()) ?? [];
    setState(() {
      _contacts = contacts;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('联系人列表'),
      ),
      body: ListView.builder(
        itemCount: _contacts.length,
        itemBuilder: (context, index) {
          Contact contact = _contacts[index];
          return ListTile(
            title: Text(contact.displayName ?? ''),
            subtitle: contact.phones?.isNotEmpty == true
                ? Text(contact.phones!.first.value ?? '')
                : null,
          );
        },
      ),
    );
  }
}

更多关于Flutter联系人管理插件contacts_androidx_example的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter联系人管理插件contacts_androidx_example的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


contacts_androidx_example 是一个用于在 Flutter 应用中管理 Android 设备上联系人的插件。它基于 AndroidX 库,提供了读取、写入和删除联系人等操作。以下是如何在 Flutter 项目中使用 contacts_androidx_example 插件的步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 contacts_androidx_example 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  contacts_androidx_example: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 配置 Android 权限

为了访问联系人,你需要在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>

3. 请求运行时权限

在 Android 6.0(API 23)及以上版本中,你需要在运行时请求权限。你可以使用 permission_handler 插件来请求权限。

首先,添加 permission_handler 依赖:

dependencies:
  permission_handler: ^10.0.0  # 请使用最新版本

然后,在代码中请求权限:

import 'package:permission_handler/permission_handler.dart';

Future<void> requestPermissions() async {
  var status = await Permission.contacts.status;
  if (!status.isGranted) {
    await Permission.contacts.request();
  }
}

4. 使用 contacts_androidx_example 插件

以下是一些常见的操作示例:

读取联系人

import 'package:contacts_androidx_example/contacts_androidx_example.dart';

Future<void> readContacts() async {
  List<Contact> contacts = await ContactsAndroidxExample.getContacts();
  for (var contact in contacts) {
    print('Name: ${contact.displayName}, Phone: ${contact.phones.first}');
  }
}

添加联系人

import 'package:contacts_androidx_example/contacts_androidx_example.dart';

Future<void> addContact() async {
  Contact newContact = Contact(
    displayName: 'John Doe',
    phones: [Phone(number: '1234567890')],
  );
  await ContactsAndroidxExample.addContact(newContact);
}

删除联系人

import 'package:contacts_androidx_example/contacts_androidx_example.dart';

Future<void> deleteContact(String contactId) async {
  await ContactsAndroidxExample.deleteContact(contactId);
}

5. 完整示例

以下是一个完整的示例,展示了如何请求权限、读取联系人、添加联系人和删除联系人:

import 'package:flutter/material.dart';
import 'package:contacts_androidx_example/contacts_androidx_example.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();
    requestPermissions();
  }

  Future<void> requestPermissions() async {
    var status = await Permission.contacts.status;
    if (!status.isGranted) {
      await Permission.contacts.request();
    }
    readContacts();
  }

  Future<void> readContacts() async {
    List<Contact> contactList = await ContactsAndroidxExample.getContacts();
    setState(() {
      contacts = contactList;
    });
  }

  Future<void> addContact() async {
    Contact newContact = Contact(
      displayName: 'John Doe',
      phones: [Phone(number: '1234567890')],
    );
    await ContactsAndroidxExample.addContact(newContact);
    readContacts();
  }

  Future<void> deleteContact(String contactId) async {
    await ContactsAndroidxExample.deleteContact(contactId);
    readContacts();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Contacts'),
      ),
      body: ListView.builder(
        itemCount: contacts.length,
        itemBuilder: (context, index) {
          var contact = contacts[index];
          return ListTile(
            title: Text(contact.displayName ?? 'No Name'),
            subtitle: Text(contact.phones.isNotEmpty ? contact.phones.first.number : 'No Phone'),
            trailing: IconButton(
              icon: Icon(Icons.delete),
              onPressed: () => deleteContact(contact.id),
            ),
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: addContact,
        child: Icon(Icons.add),
      ),
    );
  }
}
回到顶部