Flutter联系人管理插件at_contacts_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
注意事项:
- 您只需要运行一次
flutter pub global activate
。 - 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
更多关于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 应用,它请求访问联系人权限,读取联系人列表,并允许用户添加新的联系人。注意,在实际应用中,你可能需要更复杂的错误处理和用户界面设计。