Flutter访问联系人插件access_contacts的使用
Flutter访问联系人插件access_contacts的使用
使用说明
access_contacts
是一个用于访问和管理设备联系人的 Flutter 插件。通过该插件,您可以轻松地获取设备上的联系人信息,并实现添加新联系人的功能。
安装与配置
-
在
pubspec.yaml
文件中添加依赖:dependencies: access_contacts: ^版本号
-
运行以下命令以安装依赖:
flutter pub get
-
确保在 Android 和 iOS 平台上正确配置权限:
- Android:在
AndroidManifest.xml
中添加读取联系人的权限:<uses-permission android:name="android.permission.READ_CONTACTS"/>
- iOS:在
Info.plist
中添加隐私权限描述:<key>NSContactsUsageDescription</key> <string>我们需要访问您的联系人信息</string>
- Android:在
示例代码
以下是一个完整的示例代码,展示如何使用 access_contacts
插件访问和管理联系人。
示例代码
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:access_contacts/access_contacts.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
final _accessContactsPlugin = AccessContacts();
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// 初始化平台状态
Future<void> initPlatformState() async {
String platformVersion;
try {
platformVersion = await _accessContactsPlugin.getPlatformVersion() ?? 'Unknown platform version';
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
// 获取联系人列表
Future<List<Map<String, String>>> getContacts() async {
List<Map<String, String>> contactList = await _accessContactsPlugin.getAllCotntacts();
return contactList;
}
// 添加新联系人
Future<void> addNewContact() async {
var addContact = await _accessContactsPlugin.addNewContact();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
backgroundColor: Colors.transparent,
leading: IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.white,),
onPressed: () => Navigator.of(context).pop(),
),
actions: [
IconButton(
onPressed: () {
getContacts();
setState(() {});
},
icon: const Icon(Icons.refresh)
)
],
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () => addNewContact(),
label: const Text('Add New Contact'),
icon: const Icon(Icons.add),
backgroundColor: Colors.yellow[800],
),
body: FutureBuilder(
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.active && !snapshot.hasData) {
return Center(
child: Text("Loading contacts"),
);
}
if (snapshot.connectionState == ConnectionState.done && snapshot.hasError) {
return Center(
child: Text("Error"),
);
}
return ListView.builder(
itemCount: snapshot.data?.length,
itemBuilder: (context, index) {
return Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.grey, width: 1)),
margin: EdgeInsets.all(5),
padding: EdgeInsets.all(10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(snapshot.data![index]["name"]!),
SizedBox(height: 5),
Text(snapshot.data![index]["phone"]!),
],
),
);
},
);
},
future: getContacts(),
),
),
);
}
}
更多关于Flutter访问联系人插件access_contacts的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter访问联系人插件access_contacts的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,如果你想访问设备的联系人信息,可以使用 access_contacts
插件。这个插件允许你读取和写入设备的联系人信息。以下是如何在 Flutter 项目中使用 access_contacts
插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 access_contacts
插件的依赖:
dependencies:
flutter:
sdk: flutter
access_contacts: ^0.1.0 # 使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 配置权限
为了访问联系人信息,你需要在 Android 和 iOS 上配置相应的权限。
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>We need access to your contacts to display them in the app.</string>
3. 使用插件
你可以在你的 Flutter 代码中使用 access_contacts
插件来读取和写入联系人信息。
导入插件
首先,导入 access_contacts
插件:
import 'package:access_contacts/access_contacts.dart';
请求权限
在使用插件之前,你需要请求访问联系人的权限:
final AccessContacts _accessContacts = AccessContacts();
Future<void> requestPermission() async {
bool hasPermission = await _accessContacts.hasPermission();
if (!hasPermission) {
await _accessContacts.requestPermission();
}
}
读取联系人
你可以使用 getContacts
方法来读取设备上的联系人:
Future<void> getContacts() async {
List<Contact> contacts = await _accessContacts.getContacts();
for (var contact in contacts) {
print('Name: ${contact.displayName}, Phone: ${contact.phones}');
}
}
写入联系人
你可以使用 addContact
方法来添加新的联系人:
Future<void> addContact() async {
Contact newContact = Contact(
displayName: 'John Doe',
phones: [Phone(number: '1234567890')],
);
await _accessContacts.addContact(newContact);
}
4. 完整示例
以下是一个完整的示例,展示了如何使用 access_contacts
插件来读取和写入联系人信息:
import 'package:flutter/material.dart';
import 'package:access_contacts/access_contacts.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: ContactScreen(),
);
}
}
class ContactScreen extends StatefulWidget {
[@override](/user/override)
_ContactScreenState createState() => _ContactScreenState();
}
class _ContactScreenState extends State<ContactScreen> {
final AccessContacts _accessContacts = AccessContacts();
List<Contact> _contacts = [];
[@override](/user/override)
void initState() {
super.initState();
requestPermission();
}
Future<void> requestPermission() async {
bool hasPermission = await _accessContacts.hasPermission();
if (!hasPermission) {
await _accessContacts.requestPermission();
}
getContacts();
}
Future<void> getContacts() async {
List<Contact> contacts = await _accessContacts.getContacts();
setState(() {
_contacts = contacts;
});
}
Future<void> addContact() async {
Contact newContact = Contact(
displayName: 'John Doe',
phones: [Phone(number: '1234567890')],
);
await _accessContacts.addContact(newContact);
getContacts();
}
[@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?.first.number ?? 'No Phone'),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: addContact,
child: Icon(Icons.add),
),
);
}
}