Abhishek Lamichhane

Abhishek Lamichhane
Back to Projects
Open Source / Flutter PluginPublished on pub.dev • Zero Permissions • iOS & Android

Advanced Native Contact Picker

Zero-permission native Flutter plugin for picking contacts on Android & iOS using modern system UIs (CNContactPickerViewController & ACTION_PICK), eliminating explicit READ_CONTACTS manifest permissions.

CORE ARCHITECTURAL FEATURES & CAPABILITIES
  • Zero Permissions Required: Operates using native system picker flows (CNContactPickerViewController on iOS and zero-permission ACTION_PICK / API 37+ Contact Picker on Android), granting temporary read access without requiring explicit READ_CONTACTS permissions.
  • Single & Multi Selection: Supports picking a single contact or enabling multi-selection mode with configurable selection limits (allowMultiple: true, selectionLimit: 5).
  • Native Selection Action Sheet (iOS): Automatically presents a native bottom sheet when a contact has multiple numbers or emails so the user can choose the exact entry.
  • Configurable Fields: Flexible data fetching for phone numbers only (default) or including email addresses (includeEmail: true).
  • Clean Strongly-Typed Models: Returns strongly-typed NativeContact models (lookupKey, name, phones, emails) and LabeledValue objects (label, value).

Technologies & Architecture Stack

Flutter / DartSwift / iOS (CNContactPicker)Kotlin / Android (ACTION_PICK)Zero PermissionsMulti-Select & ActionSheetpub.dev
Quick Start (Dart / Flutter)

// 1. Add dependency to pubspec.yaml

dependencies:
  advanced_native_contact_picker: ^latest_version

// 2. Zero-permission contact selection

final List<NativeContact> contacts = await NativeContactPicker.pickContact(
  allowMultiple: true,
  includeEmail: true,
);

Zero Manifest Permissions

Operates using native system picker flows (CNContactPickerViewController on iOS and ACTION_PICK / API 37+ Contact Picker on Android), granting temporary user-selected read access without requiring broad READ_CONTACTS permissions.

Native ActionSheet (iOS)

When a selected contact has multiple telephone numbers or email addresses, iOS automatically presents a native action sheet bottom sheet so the user can choose the exact entry with zero custom UI overhead.

Strongly-Typed Models
NativeContact
  • lookupKey: String (Unique ID)
  • name: String (Full name)
  • phones: List<LabeledValue>
  • emails: List<LabeledValue>
LabeledValue
  • label: String (e.g., "mobile", "work")
  • value: String (Phone / Email)