파파비의 블로그
플러터, flutter) Fetching Data, init & of(context) 본문
1. Fetching Data
데이터를 어딘가에서 가져오는 것, 그것은 데이터를 올리는 것 보다 쉽다.
왜냐면 데이터를 첨부할 필요가 없기 때문이다.
여기를 살펴보면, 주의해야할 점은 2가지로 압축된다.
1. async, await을 잘 쓰자. 그리고 얘네들은 try-catch로 무조건 에러 처리를 습관화하자.
2. get은 url만 넣으면 된다.
2. Init & of(context)
위에 저 메소드는 시작할 때 data를 끌고와서 화면을 구성하게 된다.
그럼 언제 실행하는게 좋을까? 당연히 init이 그 역할에 부응한다고 보이지 않는가?
그런데 Provider를 통해 활용하다보니, 우리는 of(context)를 init에 사용하게 된다.
그런데, init이 실행될 때는 context가 완전히 형성된 시기가 아니라서, of(context)를 init에서 쓰면
에러를 발생시킨다.
그럼 어떻게 해결할 수 있을까?
해결방법은 2가지이다.
1. Future.delayed(duration).then을 활용하여 init에서 실행시키기
그냥 일단 실행시켜놓고, initState의 다른 코드들이 다 실행된 뒤에 그 직후 실행시키도록 설계하는 방법이다.
init이 끝나면 context가 완료되기에 그 직후를 노리는 방법이다.
위 코드는 실제로 Duration은 즉시 실행되지만 의미가 없고, then 부분을 메모리에 옮겨 나머지 init부분들이 실행된 뒤에 실행하라는 의미를 갖는다.
다만 여기서는 에러가 날 텐데 그 이유는 listen:false를 설정안했기 때문이다.
initstate에서는 listen:false를 설정해주어야만 한다.
2. didChangeDependenices() 활용하기
이 방법은 init이 완전히 끝난 후 이 메소드가 실행되는 것을 이용한다. 그리고 이게 완료되면 build가 실행되기 된다.
그래서 그 사이를 활용하기에 적합한 메소드다.
다만 얘는 build가 실행된 직후마다 매번 실행되기 때문에, flag를 통해 한번만 실행될 수 있도록 하는게 중요하다.
'개발 > flutter' 카테고리의 다른 글
플러터, flutter) Pull - to - refresh 기능 넣기 (0) | 2020.06.11 |
---|---|
플러터, flutter) Fetched된 Data 가공처리하기 (0) | 2020.06.11 |
플러터, flutter) future에 따른 - 로딩창 띄우기 (0) | 2020.06.10 |
플러터, flutter) Future 제대로 이해하기 & 에러 처리 & async await (0) | 2020.06.10 |
플러터, flutter) 데이터를 저장하는 방법 - 웹서버를 중심으로 (0) | 2020.06.10 |