├── .gitignore
├── .metadata
├── CHANGELOG.md
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
├── settings.gradle
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── kotlin
│ └── co
│ └── quis
│ └── flutter_contacts
│ ├── Contact.kt
│ ├── ContactChangeObserver.kt
│ ├── FlutterContacts.kt
│ ├── FlutterContactsPlugin.kt
│ └── properties
│ ├── Account.kt
│ ├── Address.kt
│ ├── Email.kt
│ ├── Event.kt
│ ├── Group.kt
│ ├── Name.kt
│ ├── Note.kt
│ ├── Organization.kt
│ ├── Phone.kt
│ ├── SocialMedia.kt
│ └── Website.kt
├── doc
└── api
│ ├── __404error.html
│ ├── categories.json
│ ├── config
│ ├── FlutterContactsConfig-class-sidebar.html
│ ├── FlutterContactsConfig-class.html
│ ├── FlutterContactsConfig
│ │ ├── FlutterContactsConfig.html
│ │ ├── includeNonVisibleOnAndroid.html
│ │ ├── includeNotesOnIos13AndAbove.html
│ │ ├── returnUnifiedContacts.html
│ │ └── vCardVersion.html
│ ├── VCardVersion-enum-sidebar.html
│ ├── VCardVersion.html
│ ├── VCardVersion
│ │ ├── VCardVersion.html
│ │ └── values-constant.html
│ ├── config-library-sidebar.html
│ └── config-library.html
│ ├── contact
│ ├── Contact-class-sidebar.html
│ ├── Contact-class.html
│ ├── Contact
│ │ ├── Contact.fromJson.html
│ │ ├── Contact.fromVCard.html
│ │ ├── Contact.html
│ │ ├── accounts.html
│ │ ├── addresses.html
│ │ ├── deduplicateProperties.html
│ │ ├── delete.html
│ │ ├── displayName.html
│ │ ├── emails.html
│ │ ├── events.html
│ │ ├── groups.html
│ │ ├── hashCode.html
│ │ ├── id.html
│ │ ├── insert.html
│ │ ├── isStarred.html
│ │ ├── isUnified.html
│ │ ├── name.html
│ │ ├── notes.html
│ │ ├── operator_equals.html
│ │ ├── organizations.html
│ │ ├── phones.html
│ │ ├── photo.html
│ │ ├── photoFetched.html
│ │ ├── photoOrThumbnail.html
│ │ ├── propertiesFetched.html
│ │ ├── socialMedias.html
│ │ ├── thumbnail.html
│ │ ├── thumbnailFetched.html
│ │ ├── toJson.html
│ │ ├── toString.html
│ │ ├── toVCard.html
│ │ ├── update.html
│ │ └── websites.html
│ ├── contact-library-sidebar.html
│ └── contact-library.html
│ ├── diacritics
│ ├── diacritics-library-sidebar.html
│ ├── diacritics-library.html
│ └── removeDiacritics.html
│ ├── flutter_contacts
│ ├── FlutterContacts-class-sidebar.html
│ ├── FlutterContacts-class.html
│ ├── FlutterContacts
│ │ ├── FlutterContacts.html
│ │ ├── addListener.html
│ │ ├── config.html
│ │ ├── deleteContact.html
│ │ ├── deleteContacts.html
│ │ ├── deleteGroup.html
│ │ ├── getContact.html
│ │ ├── getContacts.html
│ │ ├── getGroups.html
│ │ ├── insertContact.html
│ │ ├── insertGroup.html
│ │ ├── openExternalEdit.html
│ │ ├── openExternalInsert.html
│ │ ├── openExternalPick.html
│ │ ├── openExternalView.html
│ │ ├── removeListener.html
│ │ ├── requestPermission.html
│ │ ├── updateContact.html
│ │ └── updateGroup.html
│ ├── flutter_contacts-library-sidebar.html
│ └── flutter_contacts-library.html
│ ├── index.html
│ ├── index.json
│ ├── properties_account
│ ├── Account-class-sidebar.html
│ ├── Account-class.html
│ ├── Account
│ │ ├── Account.fromJson.html
│ │ ├── Account.html
│ │ ├── mimetypes.html
│ │ ├── name.html
│ │ ├── rawId.html
│ │ ├── toJson.html
│ │ ├── toString.html
│ │ └── type.html
│ ├── properties_account-library-sidebar.html
│ └── properties_account-library.html
│ ├── properties_address
│ ├── Address-class-sidebar.html
│ ├── Address-class.html
│ ├── Address
│ │ ├── Address.fromJson.html
│ │ ├── Address.html
│ │ ├── city.html
│ │ ├── country.html
│ │ ├── customLabel.html
│ │ ├── hashCode.html
│ │ ├── isoCountry.html
│ │ ├── label.html
│ │ ├── neighborhood.html
│ │ ├── operator_equals.html
│ │ ├── pobox.html
│ │ ├── postalCode.html
│ │ ├── state.html
│ │ ├── street.html
│ │ ├── subAdminArea.html
│ │ ├── subLocality.html
│ │ ├── toJson.html
│ │ ├── toString.html
│ │ └── toVCard.html
│ ├── AddressLabel-enum-sidebar.html
│ ├── AddressLabel.html
│ ├── AddressLabel
│ │ ├── AddressLabel.html
│ │ └── values-constant.html
│ ├── properties_address-library-sidebar.html
│ └── properties_address-library.html
│ ├── properties_email
│ ├── Email-class-sidebar.html
│ ├── Email-class.html
│ ├── Email
│ │ ├── Email.fromJson.html
│ │ ├── Email.html
│ │ ├── address.html
│ │ ├── customLabel.html
│ │ ├── hashCode.html
│ │ ├── isPrimary.html
│ │ ├── label.html
│ │ ├── operator_equals.html
│ │ ├── toJson.html
│ │ ├── toString.html
│ │ └── toVCard.html
│ ├── EmailLabel-enum-sidebar.html
│ ├── EmailLabel.html
│ ├── EmailLabel
│ │ ├── EmailLabel.html
│ │ └── values-constant.html
│ ├── properties_email-library-sidebar.html
│ └── properties_email-library.html
│ ├── properties_event
│ ├── Event-class-sidebar.html
│ ├── Event-class.html
│ ├── Event
│ │ ├── Event.fromJson.html
│ │ ├── Event.html
│ │ ├── customLabel.html
│ │ ├── day.html
│ │ ├── hashCode.html
│ │ ├── label.html
│ │ ├── month.html
│ │ ├── operator_equals.html
│ │ ├── toJson.html
│ │ ├── toString.html
│ │ ├── toVCard.html
│ │ └── year.html
│ ├── EventLabel-enum-sidebar.html
│ ├── EventLabel.html
│ ├── EventLabel
│ │ ├── EventLabel.html
│ │ └── values-constant.html
│ ├── properties_event-library-sidebar.html
│ └── properties_event-library.html
│ ├── properties_group
│ ├── Group-class-sidebar.html
│ ├── Group-class.html
│ ├── Group
│ │ ├── Group.fromJson.html
│ │ ├── Group.html
│ │ ├── id.html
│ │ ├── name.html
│ │ ├── toJson.html
│ │ └── toString.html
│ ├── properties_group-library-sidebar.html
│ └── properties_group-library.html
│ ├── properties_name
│ ├── Name-class-sidebar.html
│ ├── Name-class.html
│ ├── Name
│ │ ├── Name.fromJson.html
│ │ ├── Name.html
│ │ ├── first.html
│ │ ├── firstPhonetic.html
│ │ ├── hashCode.html
│ │ ├── last.html
│ │ ├── lastPhonetic.html
│ │ ├── middle.html
│ │ ├── middlePhonetic.html
│ │ ├── nickname.html
│ │ ├── operator_equals.html
│ │ ├── prefix.html
│ │ ├── suffix.html
│ │ ├── toJson.html
│ │ ├── toString.html
│ │ └── toVCard.html
│ ├── properties_name-library-sidebar.html
│ └── properties_name-library.html
│ ├── properties_note
│ ├── Note-class-sidebar.html
│ ├── Note-class.html
│ ├── Note
│ │ ├── Note.fromJson.html
│ │ ├── Note.html
│ │ ├── hashCode.html
│ │ ├── operator_equals.html
│ │ ├── toJson.html
│ │ ├── toString.html
│ │ └── toVCard.html
│ ├── properties_note-library-sidebar.html
│ └── properties_note-library.html
│ ├── properties_organization
│ ├── Organization-class-sidebar.html
│ ├── Organization-class.html
│ ├── Organization
│ │ ├── Organization.fromJson.html
│ │ ├── Organization.html
│ │ ├── company.html
│ │ ├── department.html
│ │ ├── hashCode.html
│ │ ├── jobDescription.html
│ │ ├── officeLocation.html
│ │ ├── operator_equals.html
│ │ ├── phoneticName.html
│ │ ├── symbol.html
│ │ ├── title.html
│ │ ├── toJson.html
│ │ ├── toString.html
│ │ └── toVCard.html
│ ├── properties_organization-library-sidebar.html
│ └── properties_organization-library.html
│ ├── properties_phone
│ ├── Phone-class-sidebar.html
│ ├── Phone-class.html
│ ├── Phone
│ │ ├── Phone.fromJson.html
│ │ ├── Phone.html
│ │ ├── customLabel.html
│ │ ├── hashCode.html
│ │ ├── isPrimary.html
│ │ ├── label.html
│ │ ├── normalizedNumber.html
│ │ ├── number.html
│ │ ├── operator_equals.html
│ │ ├── toJson.html
│ │ ├── toString.html
│ │ └── toVCard.html
│ ├── PhoneLabel-enum-sidebar.html
│ ├── PhoneLabel.html
│ ├── PhoneLabel
│ │ ├── PhoneLabel.html
│ │ └── values-constant.html
│ ├── properties_phone-library-sidebar.html
│ └── properties_phone-library.html
│ ├── properties_social_media
│ ├── SocialMedia-class-sidebar.html
│ ├── SocialMedia-class.html
│ ├── SocialMedia
│ │ ├── SocialMedia.fromJson.html
│ │ ├── SocialMedia.html
│ │ ├── customLabel.html
│ │ ├── hashCode.html
│ │ ├── label.html
│ │ ├── operator_equals.html
│ │ ├── toJson.html
│ │ ├── toString.html
│ │ ├── toVCard.html
│ │ └── userName.html
│ ├── SocialMediaLabel-enum-sidebar.html
│ ├── SocialMediaLabel.html
│ ├── SocialMediaLabel
│ │ ├── SocialMediaLabel.html
│ │ └── values-constant.html
│ ├── lowerCaseStringToSocialMediaLabel.html
│ ├── properties_social_media-library-sidebar.html
│ └── properties_social_media-library.html
│ ├── properties_website
│ ├── Website-class-sidebar.html
│ ├── Website-class.html
│ ├── Website
│ │ ├── Website.fromJson.html
│ │ ├── Website.html
│ │ ├── customLabel.html
│ │ ├── hashCode.html
│ │ ├── label.html
│ │ ├── operator_equals.html
│ │ ├── toJson.html
│ │ ├── toString.html
│ │ ├── toVCard.html
│ │ └── url.html
│ ├── WebsiteLabel-enum-sidebar.html
│ ├── WebsiteLabel.html
│ ├── WebsiteLabel
│ │ ├── WebsiteLabel.html
│ │ └── values-constant.html
│ ├── properties_website-library-sidebar.html
│ └── properties_website-library.html
│ ├── search.html
│ ├── static-assets
│ ├── docs.dart.js
│ ├── docs.dart.js.map
│ ├── favicon.png
│ ├── github.css
│ ├── highlight.pack.js
│ ├── play_button.svg
│ ├── readme.md
│ ├── search.svg
│ └── styles.css
│ └── vcard
│ ├── Param-class-sidebar.html
│ ├── Param-class.html
│ ├── Param
│ ├── Param.html
│ ├── key.html
│ ├── toString.html
│ └── value.html
│ ├── VCardParser-class-sidebar.html
│ ├── VCardParser-class.html
│ ├── VCardParser
│ ├── VCardParser.html
│ ├── decode.html
│ ├── encode.html
│ ├── parse.html
│ └── unfold.html
│ ├── vCardEncode.html
│ ├── vcard-library-sidebar.html
│ └── vcard-library.html
├── example
├── .gitignore
├── .metadata
├── README.md
├── android
│ ├── .gitignore
│ ├── app
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ │ └── co
│ │ │ │ │ └── quis
│ │ │ │ │ └── flutter_contacts_example
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── res
│ │ │ │ ├── drawable-v21
│ │ │ │ └── launch_background.xml
│ │ │ │ ├── drawable
│ │ │ │ └── launch_background.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── values-night
│ │ │ │ └── styles.xml
│ │ │ │ └── values
│ │ │ │ └── styles.xml
│ │ │ └── profile
│ │ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ └── gradle-wrapper.properties
│ └── settings.gradle
├── ios
│ ├── .gitignore
│ ├── Flutter
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Runner.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── Runner
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ └── README.md
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ └── Runner-Bridging-Header.h
├── lib
│ └── main.dart
└── pubspec.yaml
├── example_full
├── .gitignore
├── .metadata
├── README.md
├── android
│ ├── .gitignore
│ ├── app
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ │ └── co
│ │ │ │ │ └── quis
│ │ │ │ │ └── flutter_contacts_example
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ └── launch_background.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ └── values
│ │ │ │ └── styles.xml
│ │ │ └── profile
│ │ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ └── gradle-wrapper.properties
│ └── settings.gradle
├── ios
│ ├── .gitignore
│ ├── Flutter
│ │ ├── .last_build_id
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Runner.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── Runner
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ └── README.md
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ └── Runner-Bridging-Header.h
├── lib
│ ├── main.dart
│ ├── pages
│ │ ├── contact_list_page.dart
│ │ ├── contact_page.dart
│ │ ├── edit_contact_page.dart
│ │ ├── form_components
│ │ │ ├── address_form.dart
│ │ │ ├── email_form.dart
│ │ │ ├── event_form.dart
│ │ │ ├── name_form.dart
│ │ │ ├── note_form.dart
│ │ │ ├── organization_form.dart
│ │ │ ├── phone_form.dart
│ │ │ ├── social_media_form.dart
│ │ │ └── website_form.dart
│ │ └── groups_page.dart
│ └── util
│ │ └── avatar.dart
└── pubspec.yaml
├── ios
├── .gitignore
├── Assets
│ └── .gitkeep
├── Classes
│ ├── Contact.swift
│ ├── FlutterContactsPlugin.h
│ ├── FlutterContactsPlugin.m
│ ├── SwiftFlutterContactsPlugin.swift
│ └── properties
│ │ ├── Account.swift
│ │ ├── Address.swift
│ │ ├── Email.swift
│ │ ├── Event.swift
│ │ ├── Group.swift
│ │ ├── Name.swift
│ │ ├── Note.swift
│ │ ├── Organization.swift
│ │ ├── Phone.swift
│ │ ├── SocialMedia.swift
│ │ └── Website.swift
└── flutter_contacts.podspec
├── lib
├── config.dart
├── contact.dart
├── diacritics.dart
├── flutter_contacts.dart
├── properties
│ ├── account.dart
│ ├── address.dart
│ ├── email.dart
│ ├── event.dart
│ ├── group.dart
│ ├── name.dart
│ ├── note.dart
│ ├── organization.dart
│ ├── phone.dart
│ ├── social_media.dart
│ └── website.dart
└── vcard.dart
├── pubspec.yaml
├── scripts
└── format.sh
└── test
├── contact_test.dart
├── diacritics_test.dart
├── flutter_contacts_test.dart
├── testdata
└── vcards
│ ├── android-default-contact-app.json
│ ├── android-default-contact-app.vcf
│ ├── bvcard.com.json
│ ├── bvcard.com.vcf
│ ├── ios.json
│ ├── ios.vcf
│ ├── macos.json
│ ├── macos.vcf
│ ├── qr-code-generator.com.json
│ ├── qr-code-generator.com.vcf
│ ├── vcardmaker.com.json
│ ├── vcardmaker.com.vcf
│ ├── whatsapp.json
│ └── whatsapp.vcf
├── vcard_parser_test.dart
├── vcard_v3_test.dart
└── vcard_v4_test.dart
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .dart_tool/
3 |
4 | .packages
5 | .pub/
6 |
7 | build/
8 |
9 | pubspec.lock
10 |
11 | # IntelliJ related
12 | *.iml
13 | *.ipr
14 | *.iws
15 | .idea/
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: f139b11009aeb8ed2a3a3aa8b0066e482709dde3
8 | channel: stable
9 |
10 | project_type: plugin
11 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Joachim Valente
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:pedantic/analysis_options.yaml
2 |
3 | linter:
4 | rules:
5 | # set literals are not supported before dart 2.2
6 | prefer_collection_literals: false
7 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | group 'co.quis.flutter_contacts'
2 | version '1.0-SNAPSHOT'
3 |
4 | buildscript {
5 | ext.kotlin_version = '1.7.22'
6 | repositories {
7 | google()
8 | mavenCentral()
9 | }
10 |
11 | dependencies {
12 | classpath 'com.android.tools.build:gradle:8.3.1'
13 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
14 | }
15 | }
16 |
17 | rootProject.allprojects {
18 | repositories {
19 | google()
20 | mavenCentral()
21 | }
22 | }
23 |
24 | apply plugin: 'com.android.library'
25 | apply plugin: 'kotlin-android'
26 |
27 | android {
28 | compileSdk 34
29 |
30 | namespace 'co.quis.flutter_contacts'
31 |
32 | compileOptions {
33 | sourceCompatibility JavaVersion.VERSION_17
34 | targetCompatibility JavaVersion.VERSION_17
35 | }
36 |
37 | kotlinOptions {
38 | jvmTarget = 17
39 | }
40 |
41 | defaultConfig {
42 | minSdk 19
43 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
44 | }
45 | lintOptions {
46 | disable 'InvalidPackage'
47 | }
48 |
49 | dependencies {
50 | implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.enableR8=true
3 | android.useAndroidX=true
4 | android.enableJetifier=true
5 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
6 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'flutter_contacts'
2 |
--------------------------------------------------------------------------------
/android/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/android/src/main/kotlin/co/quis/flutter_contacts/Contact.kt:
--------------------------------------------------------------------------------
1 | package co.quis.flutter_contacts
2 |
3 | import co.quis.flutter_contacts.properties.Account
4 | import co.quis.flutter_contacts.properties.Address
5 | import co.quis.flutter_contacts.properties.Email
6 | import co.quis.flutter_contacts.properties.Event
7 | import co.quis.flutter_contacts.properties.Group
8 | import co.quis.flutter_contacts.properties.Name
9 | import co.quis.flutter_contacts.properties.Note
10 | import co.quis.flutter_contacts.properties.Organization
11 | import co.quis.flutter_contacts.properties.Phone
12 | import co.quis.flutter_contacts.properties.SocialMedia
13 | import co.quis.flutter_contacts.properties.Website
14 |
15 | data class Contact(
16 | var id: String,
17 | var displayName: String,
18 | var thumbnail: ByteArray? = null,
19 | var photo: ByteArray? = null,
20 | val isStarred: Boolean = false,
21 | var name: Name = Name(),
22 | var phones: List = listOf(),
23 | var emails: List = listOf(),
24 | var addresses: List = listOf(),
25 | var organizations: List = listOf(),
26 | var websites: List = listOf(),
27 | var socialMedias: List = listOf(),
28 | var events: List = listOf(),
29 | var notes: List = listOf(),
30 | var accounts: List = listOf(),
31 | var groups: List = listOf()
32 | ) {
33 | companion object {
34 | fun fromMap(m: Map): Contact {
35 | return Contact(
36 | m["id"] as String,
37 | m["displayName"] as String,
38 | m["thumbnail"] as? ByteArray,
39 | m["photo"] as? ByteArray,
40 | m["isStarred"] as Boolean,
41 | Name.fromMap(m["name"] as Map),
42 | (m["phones"] as List