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;
  });
}