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

发布于 1周前 作者 bupafengyu 来自 Flutter

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

Overview

at_contacts_flutter 是为Flutter开发者设计的,用于在其基于 atPlatform 的应用程序中添加联系人管理功能。这个开源包是用Dart编写的,支持Flutter,并遵循atPlatform的去中心化、边缘计算模型,具有以下特点:

  • 通过个人数据存储对数据访问进行加密控制
  • 不需要应用程序后端
  • 端到端加密,只有数据所有者拥有密钥
  • 私有且无监控连接
  • 添加新联系人
  • 阻止/解阻止联系人
  • 删除联系人

我们称之为“翻转互联网”,即让用户控制对其数据的访问权,更多详情可以参考 概述

Get Started

1. Quick Start - 使用 at_app 生成一个骨架应用

这个包包含了一个可以在示例目录中找到的工作样本应用程序,您可以使用 at_app create 命令在四步内创建一个个性化副本。

$ flutter pub global activate at_app 
$ at_app create --sample=<package ID> <app name> 
$ cd <app name>
$ flutter run

注意事项:

  1. 您只需要运行一次 flutter pub global activate
  2. Windows用户请使用 at_app.bat

2. 从GitHub克隆

您也可以从GitHub仓库克隆源代码。

$ git clone https://github.com/atsign-foundation/at_widgets.git

3. 手动添加包到项目

有关如何手动将此包添加到您的项目的说明,请参阅 pub.dev 上的相关文档 安装指南

How it Works

Setup

此包需要初始化:

initializeContactsService(rootDomain: AtEnv.rootDomain);

如果您使用的是来自该包的UI组件,则还需要初始化 SizeConfig 服务:

SizeConfig().init(context);

Usage

此包提供了两个UI界面:

  • 联系人列表界面(ContactsScreen
  • 已阻止联系人列表界面(BlockedScreen

此外,它还提供了一些有用的方法调用:

  • 获取某个 atSign 的详细信息:
TextButton(
    onPressed: () async {
        AtContact _userContact = await getAtSignDetails(_atSign);
        print(_userContact);
    },
    child: Text('Get Details'), 
),
  • 获取缓存的联系人详细信息:
TextButton(
    onPressed: () async {
        AtContact? _userContact = await getCachedContactDetail(_atSign);
        print(_userContact ?? 'No cached contact found');
    },
    child: Text('Get Cached Details'), 
),

Open Source Usage and Contributions

这是开源代码,您可以自由使用、建议更改或增强功能,或者创建自己的版本。有关如何设置工具、测试和提交拉取请求的详细指导,请参阅 CONTRIBUTING.md

示例代码

创建新联系人

ElevatedButton(
	onPressed: () async => showDialog(
		context: context,
		builder: (context) => const AddContactDialog(),
	),
	child: const Text('Add contact'),
),

显示联系人列表界面

ElevatedButton(
	onPressed: () {
		Navigator.of(context).push(MaterialPageRoute(
			builder: (BuildContext context) => const ContactsScreen(),
		));
	},
	child: const Text('Show contacts'),
),

显示已阻止联系人列表界面

ElevatedButton(
	onPressed: () {
		Navigator.of(context).push(MaterialPageRoute(
			builder: (BuildContext context) => const BlockedScreen(),
		));
	},
	child: const Text('Show blocked contacts'),
),

希望这些内容能帮助您更好地理解和使用 at_contacts_flutter 插件!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,下面是一个关于如何使用 at_contacts_flutter 插件在 Flutter 应用中管理联系人的示例代码。这个插件允许你访问和操作设备上的联系人信息。

首先,你需要在你的 Flutter 项目中添加 at_contacts_flutter 插件。在你的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  flutter:
    sdk: flutter
  at_contacts_flutter: ^最新版本号  # 请替换为实际最新版本号

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

接下来,你需要在你的应用中使用这个插件。以下是一个简单的示例,展示了如何请求权限、读取联系人列表以及添加联系人。

1. 请求权限

在 Android 和 iOS 上,你需要请求访问联系人权限。以下是一个请求权限的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Contacts Manager'),
        ),
        body: ContactsScreen(),
      ),
    );
  }
}

class ContactsScreen extends StatefulWidget {
  @override
  _ContactsScreenState createState() => _ContactsScreenState();
}

class _ContactsScreenState extends State<ContactsScreen> {
  bool hasPermission = false;

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

  Future<void> _requestPermission() async {
    bool status = await AtContactsFlutter.requestPermission();
    if (status) {
      setState(() {
        hasPermission = true;
      });
      // 可以继续执行其他操作,比如读取联系人
      _readContacts();
    } else {
      // 处理权限被拒绝的情况
      print("Permission denied");
    }
  }

  Future<void> _readContacts() async {
    // 读取联系人逻辑,将在后面展示
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: hasPermission
          ? Text("You have permission to access contacts.")
          : Text("Requesting permission to access contacts..."),
    );
  }
}

2. 读取联系人列表

接下来,你可以使用 AtContactsFlutter.getContacts() 方法来读取联系人列表:

Future<void> _readContacts() async {
  List<Contact> contacts = await AtContactsFlutter.getContacts();
  print("Contacts: $contacts");
  // 你可以在这里处理联系人数据,比如显示在一个列表中
  setState(() {
    // 例如,将联系人数据存储在状态中以在 UI 中显示
  });
}

3. 添加联系人

你也可以使用 AtContactsFlutter.addContact() 方法来添加联系人:

Future<void> _addContact() async {
  Contact newContact = Contact(
    displayName: "John Doe",
    phoneNumber: "+1234567890",
    email: "john.doe@example.com",
  );
  bool success = await AtContactsFlutter.addContact(newContact);
  if (success) {
    print("Contact added successfully.");
  } else {
    print("Failed to add contact.");
  }
}

完整示例

以下是完整的示例代码,将上述步骤整合在一起:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Contacts Manager'),
        ),
        body: ContactsScreen(),
      ),
    );
  }
}

class ContactsScreen extends StatefulWidget {
  @override
  _ContactsScreenState createState() => _ContactsScreenState();
}

class _ContactsScreenState extends State<ContactsScreen> {
  bool hasPermission = false;
  List<Contact> contacts = [];

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

  Future<void> _requestPermission() async {
    bool status = await AtContactsFlutter.requestPermission();
    if (status) {
      setState(() {
        hasPermission = true;
      });
      _readContacts();
    } else {
      print("Permission denied");
    }
  }

  Future<void> _readContacts() async {
    contacts = await AtContactsFlutter.getContacts();
    print("Contacts: $contacts");
    setState(() {});
  }

  Future<void> _addContact() async {
    Contact newContact = Contact(
      displayName: "John Doe",
      phoneNumber: "+1234567890",
      email: "john.doe@example.com",
    );
    bool success = await AtContactsFlutter.addContact(newContact);
    if (success) {
      print("Contact added successfully.");
      _readContacts(); // 重新读取联系人以更新列表
    } else {
      print("Failed to add contact.");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          if (!hasPermission)
            Text("Requesting permission to access contacts..."),
          ElevatedButton(
            onPressed: hasPermission ? _addContact : null,
            child: Text("Add Contact"),
          ),
          if (hasPermission)
            Expanded(
              child: ListView.builder(
                itemCount: contacts.length,
                itemBuilder: (context, index) {
                  Contact contact = contacts[index];
                  return ListTile(
                    title: Text(contact.displayName ?? ""),
                    subtitle: Text("${contact.phoneNumber ?? ""} - ${contact.email ?? ""}"),
                  );
                },
              ),
            ),
        ],
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的 Flutter 应用,它请求访问联系人权限,读取联系人列表,并允许用户添加新的联系人。注意,在实际应用中,你可能需要更复杂的错误处理和用户界面设计。

回到顶部