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

home2 게시판 Flutter 게시판 폰에 저장된 연락처에 추가하기 숙제 도중 Type 에러 발생 ㅠ

폰에 저장된 연락처에 추가하기 숙제 도중 Type 에러 발생 ㅠ

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

    이동하
    참가자

    *** 아래 에러 로그의 일부...

    I/flutter (12719): dongdong
    E/flutter (12719): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: type 'String' is not a subtype of type 'List<Item>?'
    E/flutter (12719): #0 _MyAppState.addPerson (package:flutter_contact/main.dart:78:15)
    E/flutter (12719): #1 _DialogDesignState.build.<anonymous closure> (package:flutter_contact/main.dart:283:35)

    *** OK버튼을 누르면 아래 함수(?)가 실행되도록 짰는데 아무래도 newPerson.phones = number;라고 명명한 부분에서 에러가 발생하는 것 같습니다.

    addPerson (given,family,number) async {
      var newPerson = Contact();
      //newPerson은 Contact란 녀석이다!로 정의
      newPerson.givenName = given;
      newPerson.familyName = given;
      newPerson.phones = number;    <---78번째 줄
      await ContactsService.addContact(newPerson);
      // 연락처에 이름 때려박아 줌
      var contacts = await ContactsService.getContacts();
      // 추가된 연락처 다시 불러와주고
      setState(() {
        name = contacts;
      });
      // 새롭게 name안에 연락처 넣어줌
    }

     

    *** 위 함수를 dialog에 보내서

    TextButton(onPressed: () {
        // widget.addName(widget.inputData.text.toString());
        // inputData List 안, text를 toString해서 보여주자!
        print(widget.inputData.text.toString());
        widget.addPerson(widget.inputData.text,
          widget.familyName.text,
          widget.phoneNumber.text,
        );
        Navigator.pop(context);

    }, child: Text('OK', style: TextStyle(fontSize: 18),)),

     

    *** OK버튼 누르면 addPerson 안에 차라락 박히면서 데이터가 촤아-악 보여질 것이라 생각했습니다...

    #33515

    codingapple
    키 마스터

    .phones 는 [] 형태로 만들어야할걸요 

    [number] 이렇게 해보거나 그럽시다 

    #33581

    이동하
    참가자

    이럴수가,,, 선생님,,, 이제껏 이 강의를 수강한 수많은 학생들이 연락처에 숫자를 넣는 '심화' 숙제를 하지 않은 것 같습니다😨

    그렇지 않고선 이걸 질문 안 했을 리가 없다는 생각이... (아님 학생분들이 너-무 똑똑하셔서 알아서 잘 해결 하신건가...🙄)

    newPerson.phones = [number]로 해결이 안돼서 공식 문서를 찾았지만...

     

    // Phone numbers
    List<Item> phones = [];

    고작 이정도의 힌트 밖에 얻을 수 없었습니다.

     

    그래서 좀 더 구글링 하던 도중 https://stackoverflow.com/questions/70824453/i-want-to-save-contact-number-at-mobile-storage-using-flutter 이 글을 발견했고

    이 사람이 짠 코드를 통해 힌트를 얻어 다음과 같이 코드를 짜보았습니다.

     

    myPerson.phones = [Item(label: "mobile", value: number)];

     

    작동이 잘 되더군요😖

    크 성취감 무엇,👍

    부디 심화 강의를 요구하는 학생들은 이 숙제를 잘 해결했기 바라며...

    항상 감사합니다!🙇

    #70919

    박상용
    참가자
    와. 이거 구글링하다가 안되서 여기까지 왔네요. 
    
    저는 이렇게 하니깐 폰넘버 입력되었어요. 
    
    var newContact = Contact();
    newContact.phones = [Item(label: "mobile", value: inputData.text.toString())];
    ContactsService.addContact(newContact);
    
    
    
    #116250

    장소윤
    참가자
    누군가에게는 도움이 됐으면 하는 마음에 작성합니다.. 
    
    
    1. List<Contact> 에서 phones(전화번호) 어떻게 가져옴?
    하나의 연락처에 여러 개의 전화번호를 담을 수 있나봅니다.
    아래는 첫 번째 연락처의 첫 번째 전화번호를 가져오는 방법입니다.
    ---
    List <Contact> contacts = await ContactsService.getContacts();
    var phone_number = contacts[0].phones?[0].value;
    ---
    
    
    2. 이름하고 전화번호 받아서 핸드폰의 연락처에 저장할 때 에러남
    familyName, givenName 으로 받았는지, 전화번호 저장할 때 리스트 속에 Item()을 넣어서 전달했는지 확인하세요.
    ---
    Contact newPerson = Contact();
    newPerson.familyName = '성';
    newPerson.givenName = '이름';
    newPerson.phones = [ Item ( label : 'mobile', value : '010-0000-0000' ) ] ;
    ---
    이렇게 하시면 에러 안날거에요.. 
    참고로 위 코드대로 하면 newPerson.displayName 을 출력했을 때 '성이름' 이라고 나옵니다. 
    아마 자동으로 familyName, givenName 을 더해서 displayName로 저장되나 봅니다.
    직접 display 에 풀네임 저장하고 꺼내쓰려는데 자꾸 null 이라 떠서 한참 골 때렸네요. 
    
    
    
    참고 : 
    https://pub.dev/documentation/contacts_service/latest/contacts_service/Item-class.html
    
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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