getPermission() async {
var status = await Permission.contacts.status;
if (status.isGranted) {
//print('허락됨');
List<Contact> contacts = await FlutterContacts.getContacts(withProperties: true);
setState(() {
name = contacts;
});
} else if (status.isDenied) {
//print('거절됨');
Permission.contacts.request();
}
if (status.isPermanentlyDenied) {
openAppSettings();
}
}
@override
void initState() {
// TODO: implement initState
super.initState();
getPermission();
} //실행 시 동작 코드
var name = [];
listAdd(String newName) async {
var newContact = Contact();
newContact.name.first = newName;
await newContact.insert();
setState(() {
if(newName.isNotEmpty) {
name.add(newContact);
}
});
getPermission(); <- 이 부분을 추가했더니 의도대로 동작
}
listRemove(Contact contact) async {
await FlutterContacts.deleteContact(contact);
setState(() {
name.remove(contact);
});
}
연락처를 추가했을 때 ui반영이 제대로 되지 않아 고민하다가 getPermission()을 넣었더니 그때부터는 의도대로 곧장 ui반영까지 잘 됩니다.
만들어 둔 삭제 기능도 마찬가지로 ui가 제대로 렌더링 되지 않았을 때는 누르면 오류를 뿜었는데
getPermission 함수를 넣고 제대로 동작하기 시작했습니다.
어짜피 getPermission 함수를 한번 더 넣으면
setState(() {
if(newName.isNotEmpty) {
name.add(newContact);
}
});
위 부분은 필요가 없게 되는데 어떤 식이 더 권장되는 방법일까요?
listAdd 함수에서 이미 연락처가 업데이트 되고 setState로 name의 list를 변경했는데 ui에는 반영이 되지 않는 이유가 뭘까요?