-
[flutter] FutureBuilder 메서드의 AsyncSnapsot 과 Snapshotflutter/flutter 공부 2023. 2. 21. 11:34
flutter 에서 외부 통신을 통해 가져오는 작업을 하게 되면 Future 에 담아줘야 하는데 받아온 결과의 타입이 Future 로 되어 있기 때문에 직접 하나 하나 담아주는 것보다는 FutureBuilder 를 이용해서 받아오도록 하는게 좋은 것 같아서 사용하고 있습니다.
<사용 예시>
FutureBuilder<String>( future: _calculation, // a previously-obtained Future<String> or null builder: (BuildContext context, AsyncSnapshot<String> snapshot) { List<Widget> children; if (snapshot.hasData) { children = <Widget>[ const Icon( Icons.check_circle_outline, color: Colors.green, size: 60, ), Padding( padding: const EdgeInsets.only(top: 16), child: Text('Result: ${snapshot.data}'), ), ]; }
https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
그런데 FutureBuilder 안에 파라미터들 중 builder 안에 사용 된 AsyncSnapsot 이란걸 안쓰고 그냥 Snapshot 을 쓰면 에러가 나타나길래 둘의 차이점이 뭔지 좀 알아봤습니다.
Flutter의 FutureBuilder 위젯을 사용하면 비동기 처리를 통해 Future의 결과를 대기하고, 결과에 따라 UI를 업데이트할 수 있습니다.
FutureBuilder의 builder 콜백 함수는 Future의 현재 상태에 따라 다른 위젯을 반환합니다.
FutureBuilder 위젯은 Future에 대한 결과를 나타내는 데 사용되는 Snapshot 객체를 생성합니다.
FutureBuilder의 builder 콜백 함수에서 반환되는 위젯은 Snapshot 객체의 현재 상태에 따라 다르게 됩니다.
Snapshot 객체에는 Future의 현재 상태와 결과, 에러 정보가 포함됩니다.
Future의 현재 상태에 따라 Snapshot 객체는 다음 중 하나의 상태 중 하나를 가질 수 있습니다.
- ConnectionState.none: Future가 아직 시작되지 않았음.
- ConnectionState.waiting: Future가 실행 중이며 결과를 기다리고 있음.
- ConnectionState.active: Future가 실행 중이며 현재 Stream에서 이벤트를 수신 중임.
- ConnectionState.done: Future가 완료되었으며 결과가 있거나 에러가 발생함.
Snapshot은 Future의 결과를 나타내는데 사용됩니다.
AsyncSnapshot 클래스는 Snapshot의 하위 클래스입니다.
AsyncSnapshot 클래스는 Future의 결과와 에러 정보를 저장하며, Snapshot의 모든 상태를 포함합니다.
AsyncSnapshot은 FutureBuilder에서 가장 많이 사용되는 Snapshot 클래스입니다.
Snapshot은 FutureBuilder에서 Future의 현재 상태를 나타내는데 사용되며, AsyncSnapshot은 Snapshot의 하위 클래스로서 Future의 결과와 에러 정보를 저장하는데 사용됩니다.
'flutter > flutter 공부' 카테고리의 다른 글
[flutter] appbar 높이 조절 방법 (1) 2023.06.02 [flutter] PDF 파일 뷰어 만들기(pdfx, internet_file 를 이용) (0) 2023.05.09 [flutter] textfield 선택해서 키보드 올라온 후 다른곳 누르면 키보드 사라지게 하기 (0) 2021.01.29 [flutter] toast 메세지 보이기 (0) 2020.04.19 [flutter] 화면 방향 고정시키기 (0) 2020.04.17