DEV/flutter (dart)
Flutter 연락처 추가 예시
석봉
2023. 2. 8. 15:33
준비물 : 패키지 다운로드 및 권한요청 설정 (하단 링크 참조)
https://seokbong.tistory.com/164
flutter 유저 앱 권한 요청 Manifest.xml 설정
pubspec.yaml AndroidManifest.xml 위 설정은 주소록 읽기 / 쓰기 예시이다.
seokbong.tistory.com
ref.
https://pub.dev/documentation/contacts_service/latest/
contacts_service - Dart API docs
contacts_service A Flutter plugin to access and manage the device's contacts. Usage To use this plugin, add contacts_service as a dependency in your pubspec.yaml file. For example: dependencies: contacts_service: ^0.6.3 Permissions Android Add the followin
pub.dev
ContactsService 예시
// 접근권한, 연락처 관련 패키지
import 'package:permission_handler/permission_handler.dart';
import 'package:contacts_service/contacts_service.dart';
...(대충 코드들)
// 연락처 접근 권한 함수 예시
getPermission() async {
// 기기에서 해당 함수를 처음 실행하는 경우 연락처를 허용 여부를 물어봄
var status = await Permission.contacts.status;
if(status.isGranted) {
// 허가된 경우
... (필요한 코드를 작성)
} else if (status.isDenied) {
// 거절된 경우
openAppSettings(); // 앱 설정화면 켜줌 (앱에서 사용자가 직접 허가해야함)
}
}
// 연락처 추가 예시
addFriend() async {
var newFriend = Contact();
// 연락처 추가 대상의 정보입력 (이름, 번호 외 이메일 등 다양한 정보 기입 가능)
newPerson.familyName = '엄';
newFriend.givenName = '준식';
newPerson.phones = [Item(label: "mobile", value: '010...'])];
// 연락처 추가
await ContactsService.addContact(newPerson);
}
// 연락처 불러오기 예시
showFriends() async {
// 연락처 가져오기 (withThumbnails : 썸네일을 포함 할것인지?)
var contacts = await ContactsService.getContacts(withThumbnails: false);
// 다른 방법으로 불러와도 된다. 아래 코드는 for문을 사용하여 모든 연락처에 접근하는 예시)
// * 하단 방법은 예시 코드로 해당 코드를 사용하면 null 처리가 안되어 에러가 뜰 수 있다.
// * 꼭 null 처리를 해주자.
for(var contact in contacts) {
var name = contact.displayName.toString(); // full name
var number = contact.phones.first.value.toString(); // 첫 번째 번호를 가져온다
}
}
setState 예시
// ===========================================================================================
// * 연락처가 추가되거나 수정될 때, 화면을 re-rendering 해야하는 경우 setState 함수를 활용하자.
// https://seokbong.tistory.com/139
// setState 구성 예시.
// ===========================================================================================
var friends = [];
showFriends() async {
// 연락처 가져오기
var contacts = await ContactsService.getContacts(withThumbnails: false);
var name = '';
var callNum = '';
var arr = [];
for(var contact in contacts) {
var chkPhones = contact.phones?.isEmpty;
name = contact.displayName.toString();
if(chkPhones == false) {
callNum = contact.phones!.first.value.toString();
}
arr.add({
'displayName': name,
'callNum': callNum
});
}
setState(() {
friends = arr;
});
}