contacts_getter
A Flutter plugin for accessing and managing contacts, call logs, and messages on Android.
โจ Features
- ๐ฑ Fetch Contacts: Retrieve contact details (ID, name, phone number, email, photo URI) with pagination and sorting options
- ๐ Fetch Call Logs: Access call log entries (number, date, type, duration) with filtering and sorting
- ๐ฌ Fetch Messages: Get SMS messages (address, body, date, type, read status) with limits and ordering
- โ Add Contacts: Create new contacts with name, phone number, and optional email
- ๐๏ธ Delete Contacts: Remove contacts by ID
- ๐งน Clear Call Logs: Delete all call log entries
Platform Support
- โ Android
- โ iOS (not implemented)
Screenshots
๐ฆ Installation
Add the plugin to your pubspec.yaml:
dependencies:
contacts_getter: any
- run the command:
flutter pub get
1.
๐ Permissions
Request permissions in your app using permission_handler:
- request a permissions thats you need
getPermissions() async {
// Request permissions based on Android version
// by adding this package
// import 'package:permission_handler/permission_handler.dart';
Map<Permission, PermissionStatus> statuses = await [
Permission.contacts,
Permission.phone,
Permission.sms,
].request();
bool hasAccess =
statuses[Permission.contacts]?.isGranted ??
true && statuses[Permission.phone]!.isGranted ??
true && statuses[Permission.sms]!.isGranted ??
true;
if (!hasAccess) {
debugPrint("Required permissions denied");
await Mediagetter().showToast(
"Please grant permissions",
length: ToastLength.long,
);
return;
}
}
Usage
Import the plugin and use its methods to interact with contacts, call logs, and messages.
import 'package:contacts_getter/contacts_getter.dart';
- Example
- A simple example to fetch and display contacts on button press:
2.
import 'package:flutter/material.dart';
import 'package:contacts_getter/contacts_getter.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<Contact> contacts = [];
Future<void> fetchContacts() async {
if (await Permission.contacts.request().isGranted) {
final fetchedContacts = await ContactsGetter().getContacts(limit: 10);
setState(() {
contacts = fetchedContacts;
});
} else {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text("Contacts permission denied")),
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Contacts Getter")),
body: Column(
children: [
ElevatedButton(
onPressed: fetchContacts,
child: const Text("Fetch Contacts"),
),
Expanded(
child: ListView.builder(
itemCount: contacts.length,
itemBuilder: (context, index) => ListTile(
title: Text(contacts[index].displayName ?? 'Unknown'),
subtitle: Text(contacts[index].phoneNumber ?? 'No phone'),
),
),
),
],
),
);
}
}
others methods
ContactsGetter().getContacts();
ContactsGetter().getCallLogs();
ContactsGetter().getMessages();
....