• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Flutter 게시판 state 반영 ui 재렌더링 관련 질문

state 반영 ui 재렌더링 관련 질문

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #136578

    SEO
    참가자
    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);
      });
    }
    
    스크린샷 2025-02-27 오후 6.05.17
    
    연락처를 추가했을 때 ui반영이 제대로 되지 않아 고민하다가 getPermission()을 넣었더니 그때부터는 의도대로 곧장 ui반영까지 잘 됩니다. 
    만들어 둔 삭제 기능도 마찬가지로 ui가 제대로 렌더링 되지 않았을 때는 누르면 오류를 뿜었는데 
    getPermission 함수를 넣고 제대로 동작하기 시작했습니다.
    어짜피 getPermission 함수를 한번 더 넣으면
    setState(() {
    if(newName.isNotEmpty) {
    name.add(newContact);
    }
    }); 
    위 부분은 필요가 없게 되는데 어떤 식이 더 권장되는 방법일까요?
    listAdd 함수에서 이미 연락처가 업데이트 되고 setState로 name의 list를 변경했는데 ui에는 반영이 되지 않는 이유가 뭘까요?
    
    #136586

    codingapple
    키 마스터
    state변경했는데도 ui가 안바뀌면 에디터 버그가 아닐까요 폰에서 플러터앱 삭제해보거나 에디터 껐다 켜봅시다
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠