Flutter联系人选择插件contactor_picker的使用

Flutter联系人选择插件contactor_picker的使用

联系人选择器 contactor_picker 是一个用于在 Flutter 应用程序中轻松选择联系人的插件。通过此插件,用户可以方便地从联系人列表中选择联系人,甚至可以通过搜索功能快速找到特定联系人。

安装

首先,在项目的 pubspec.yaml 文件中添加 contactor_picker 依赖项:

dependencies:
  contactor_picker: ^0.0.6

然后,从命令行安装依赖项:

$ flutter packages get

使用方法

列表加搜索

ContactorPicker.showPicker(
  context,
  /// 数据源
  dataList: [],
  /// 是否展示code,默认不展示
  showGroupCode: true,
  /// 选中数据
  onSelectedData: (data) {
    // 回调函数,当用户选择某个联系人时执行
  },
  /// 标题
  title: '联系人',
  /// 页面背景色
  backgroundColor: Color(0xFFFAFAFA),
  /// 当前字母颜色
  letterSelectedColor: Colors.blueAccent,
);

仅搜索

ContactorPicker.showSearchPicker(
  context,
  /// 是否展示code,默认不展示
  showGroupCode: true,
  /// 数据源
  dataList: [],
  /// 背景色
  backgroundColor: Color(0xFFFAFAFA),
  /// 选中数据
  onSelectedData: (data) {
    // 回调函数,当用户选择某个联系人时执行
  },
);

支持嵌入其他Widget

以下是一个完整的示例代码,展示了如何将 ContactorView 嵌入到 Flutter 应用程序中,并实现联系人选择功能:

import 'package:flutter/material.dart';
import 'package:contactor_picker/contactor_picker.dart';
import 'package:lpinyin/lpinyin.dart';

void main() {
  runApp(MaterialApp(home: MyApp()));
}

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

class _MyAppState extends State<MyApp> {
  String _currentData = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    print('length----${DataUtil.dataList.length}');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Plugin example app'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextButton(
              onPressed: () {
                ContactorPicker.showPicker(
                  context,
                  showGroupCode: true,
                  dataList: DataUtil.dataList.map((element) {
                    String pinyin = PinyinHelper.getPinyinE(element['name'],
                        separator: "",
                        defPinyin: '#',
                        format: PinyinFormat.WITHOUT_TONE);
                    return ContactorDataListData(
                      name: element['name'],
                      id: int.tryParse(element['zip']),
                      pinyin: pinyin,
                      // headerImageUrl: 'https://picsum.photos/250?image=9',
                      code: element['label'],
                      groupCode: element['zip'],
                    );
                  }).toList(),
                  title: '地址簿',
                  extendWidget: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Container(
                        alignment: Alignment.centerLeft,
                        height: 40,
                        child: Text('666666'),
                      ),
                      Container(
                        height: 40,
                        alignment: Alignment.centerLeft,
                        child: Text('555555'),
                      ),
                      Expanded(
                        child: Container(
                          height: 40,
                          alignment: Alignment.centerLeft,
                          child: Text('888888'),
                        ),
                      )
                    ],
                  ),
                  letterSelectedColor: Colors.blueAccent,
                  onSelectedData: (data, pageNum) {
                    print(data.toJson());
                    _currentData = data.toJson().toString();
                    setState(() {});
                  },
                );
              },
              child: Text('地址簿'),
            ),
            TextButton(
              onPressed: () {
                ContactorPicker.showSearchPicker(
                  context,
                  showGroupCode: true,
                  dataList: DataUtil.dataList.map((element) {
                    String pinyin = PinyinHelper.getPinyinE(element['name'],
                        separator: " ",
                        defPinyin: '#',
                        format: PinyinFormat.WITHOUT_TONE);
                    return ContactorDataListData(
                      name: element['name'],
                      id: int.tryParse(element['zip']),
                      pinyin: pinyin,
                      code: element['label'],
                      groupCode: element['zip'],
                    );
                  }).toList(),
                  backgroundColor: Color(0xFFFAFAFA),
                  onSelectedData: (data, pageNum) {
                    print(data.toJson());
                    _currentData = data.toJson().toString();
                    setState(() {});
                  },
                );
              },
              child: Text('搜索'),
            ),
            Container(
              padding: EdgeInsets.symmetric(horizontal: 30),
              child: Text('currentData: $_currentData\n'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用contactor_picker插件来选择联系人的示例代码。请注意,contactor_picker可能不是一个真实存在的Flutter插件名称,我假设你指的是一个类似的联系人选择插件。在真实项目中,你应该查找并确认一个真实可用的插件名称,例如contacts_service,这是Flutter社区中常用的一个联系人选择插件。

以下是如何使用contacts_service插件来选择联系人的示例代码:

1. 添加依赖

首先,在你的pubspec.yaml文件中添加contacts_service插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  contacts_service: ^x.y.z  # 替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 请求权限

在Android上,你需要在AndroidManifest.xml中请求必要的权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

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

    ...

</manifest>

在iOS上,你需要在Info.plist中添加相应的权限描述:

<key>NSContactsUsageDescription</key>
<string>This app needs access to your contacts to function properly.</string>
<key>NSContactsUsageDescription_when_in_use</key>
<string>This app needs access to your contacts when in use.</string>

3. 编写Flutter代码

在你的Flutter项目中,你可以使用以下代码来选择联系人:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ContactPickerScreen(),
    );
  }
}

class ContactPickerScreen extends StatefulWidget {
  @override
  _ContactPickerScreenState createState() => _ContactPickerScreenState();
}

class _ContactPickerScreenState extends State<ContactPickerScreen> {
  List<Contact> contacts = [];

  @override
  void initState() {
    super.initState();
    _requestPermissions();
  }

  Future<void> _requestPermissions() async {
    var status = await Permission.contacts.status;
    if (!status.isGranted) {
      var result = await Permission.contacts.request();
      if (result.isGranted) {
        _pickContacts();
      } else if (result.isDenied) {
        // 权限被拒绝
      } else if (result.isPermanentlyDenied) {
        // 权限被永久拒绝,引导用户到设置中开启权限
        openAppSettings();
      }
    } else {
      _pickContacts();
    }
  }

  Future<void> _pickContacts() async {
    try {
      List<Contact> result = await ContactsService.getContacts(
        withThumbnails: false,
      );
      setState(() {
        contacts = result;
      });
    } catch (e) {
      print("Error fetching contacts: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Contact Picker Example'),
      ),
      body: contacts.isEmpty
          ? Center(child: Text('No contacts selected'))
          : ListView.builder(
              itemCount: contacts.length,
              itemBuilder: (context, index) {
                Contact contact = contacts[index];
                return ListTile(
                  title: Text(contact.displayName),
                  subtitle: Text(contact.phones.firstOrNull?.value ?? 'No phone'),
                );
              }),
      floatingActionButton: FloatingActionButton(
        onPressed: _pickContacts,
        tooltip: 'Pick Contacts',
        child: Icon(Icons.contact_phone),
      ),
    );
  }
}

4. 运行应用

确保你已经正确配置了所有必要的权限和依赖,然后运行你的Flutter应用。你应该能够看到一个按钮,点击它会请求联系人权限,并显示选中的联系人。

请注意,以上代码使用了permission_handler插件来处理权限请求。如果你不需要处理权限请求逻辑,可以省略相关代码,但确保你的应用有适当的权限来处理联系人数据。

回到顶部