728x90
    
    
  FutureBuilder는 Flutter에서 비동기 작업의 상태를 UI에 쉽게 반영할 수 있도록 도와주는 위젯입니다. 주로 API 호출이나 파일 읽기와 같은 비동기 작업이 완료될 때까지 기다린 후, 그 결과를 기반으로 다른 UI를 표시할 때 사용됩니다.
FutureBuilder의 주요 속성
- future: 비동기 작업을 반환하는 Future 객체입니다. 예를 들어, API 요청이 포함될 수 있습니다.
 - builder: 비동기 작업의 상태에 따라 UI를 렌더링하는 함수입니다. AsyncSnapshot을 매개변수로 받아 작업의 상태와 데이터를 제공합니다.
 
AsyncSnapshot의 상태
- connectionState.none: Future가 시작되지 않았습니다.
 - connectionState.waiting: Future가 실행 중이며 대기 상태입니다.
 - connectionState.active: Stream의 경우 활성 상태이며 데이터가 전달되고 있을 때입니다.
 - connectionState.done: Future가 완료되었습니다.
 
사용 예시
다음은 API 호출의 결과를 화면에 보여주는 예제입니다.
import 'package:flutter/material.dart';
class ExampleScreen extends StatelessWidget {
  Future<String> fetchData() async {
    await Future.delayed(Duration(seconds: 2)); // Simulating a network delay
    return "Hello, FutureBuilder!";
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('FutureBuilder Example'),
      ),
      body: Center(
        child: FutureBuilder<String>(
          future: fetchData(),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return CircularProgressIndicator(); // 로딩 상태
            } else if (snapshot.hasError) {
              return Text('Error: ${snapshot.error}'); // 에러 처리
            } else if (snapshot.hasData) {
              return Text(snapshot.data!); // 성공 시 데이터 표시
            } else {
              return Text('No data available');
            }
          },
        ),
      ),
    );
  }
}
설명
- fetchData() 함수는 비동기적으로 데이터를 가져오는 역할을 합니다.
 - FutureBuilder는 future에 fetchData()를 전달받고, builder는 AsyncSnapshot을 기반으로 UI를 빌드합니다.
 - snapshot.connectionState를 통해 작업 상태를 확인하고, UI를 적절히 렌더링합니다.
 - 데이터가 도착하면 snapshot.hasData가 true가 되고, 이를 통해 데이터를 화면에 표시할 수 있습니다.
 
FutureBuilder를 사용하면 비동기 데이터에 따라 다르게 UI를 구성할 수 있어 사용자 경험을 향상시킬 수 있습니다.
728x90
    
    
  'Category > Flutter' 카테고리의 다른 글
| Flutter에서 403 오류 해결: Referer 헤더로 이미지 로드 문제 해결하기 (2) | 2024.11.03 | 
|---|---|
| Flutter의 ListView : 스크롤 가능한 목록 만들기 (0) | 2024.11.03 | 
| Dart에서 JSON 쉽게 다루기 : jsonDecode 사용법과 예제 (1) | 2024.11.03 | 
| Flutter 라이프사이클 (1) | 2024.11.02 | 
| [Flutter] StatelessWidget, StatefulWidget (0) | 2024.11.01 |