Future Builder는 미래에 완료될 비동기 작업에 대한 편리한 방법을 제공하는 Flutter 위젯이다.
자주 쓰이는 패턴
Widget Body(){
return FutureBuilder(
future: loadContents(),
builder: (BuildContext context, dynamic snapshot) {
List<Map<String, String>> datas = snapshot.data;
if (snapshot.connectionState != ConnectionState.done) {
return const Center(child: CircularProgressIndicator());
}
if (snapshot.hasError) {
return const Center(child: Text('데이터 오류'));
}
if (snapshot.hasData) {
return makeDataList(datas);
}
return const Center(child: Text('해당지역에 데이터가 없습니다.'));
});
}
loadContents()
메서드를 호출하여, contentsRepository
객체의 loadContentsFromLocation
메소드의 컨텐츠를 불러오는 역할을 합니다. loadContents() {
return contentsRepository.loadContentsFromLocation(currentLocation);
}
future
가 완료될때 호출되어 Ui를 빌드한다. BuildContext
와 AsyncSnapshot
를 매개변수로 받아서 비동기작업의 결과나 에러등을 가공하여 Ui를 구성하는 역할을 합니다.List<Map<String, String>>
형태의 datas
라는 것을 받아 snapshot.data에 할당합니다. ...
future: loadContents(),
builder: (BuildContext context, dynamic snapshot) {
print(snapshot); // snapshot을 추가, 데이터 형태 확인
List<Map<String, String>> datas = snapshot.data;
...
현재 데이터의 예외 처리로 snapshot.connectionState
,snapshot.hasError
,snapshot.hasData
각각 상황에 맞게 if구문과 함께 잘 쓰입니다.