상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Flutter에서 FutureBuilder를 사용하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
`FutureBuilder`는 Flutter에서 비동기 작업의 결과를 처리하고 UI를 업데이트하는 데 유용한 위젯입니다. 주로 API 호출, 데이터베이스 쿼리, <a href='https://sangseek.com/sangseeks/파일 읽기/ko'>파일 읽기</a> 등과 같은 비동기 작업의 결과를 기다리는 동안 UI를 구성하는 데 사용됩니다. `FutureBuilder`는 `Future` 객체를 사용하여 비동기 작업의 상태를 관리하고, 그 상태에 따라 적절한 UI를 표시합니다. 기본 사용법 `FutureBuilder`는 다음과 같은 주요 속성을 가집니다: - `future`: 비동기 작업을 수행하는 `Future` 객체입니다. - `builder`: `AsyncSnapshot`을 인자로 받아 UI를 구성하는 함수입니다. 이 함수는 `snapshot`의 상태에 따라 다른 위젯을 반환합니다. 예제 코드 아래는 `FutureBuilder`를 사용하여 API에서 데이터를 가져오는 간단한 예제입니다. ```dart i<a href='https://sangseek.com/sangseeks/mport/ko'>mport</a> 'package:flutter/material.dart'; import 'dart:async'; import 'dart:convert'; import 'package:http/http.dart' as http; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('FutureBuilder Example')), body: DataFetcher(), ), ); } } class DataFetcher extends StatelessWidget { Future<List<String>> fetchData() async { final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts')); if (response.statusCode == 200) { List<dynamic> data = json.decode(response.body); return data.map((post) => post['title'] as String).toList(); } else { <a href='https://sangseek.com/sangseeks/throw/ko'>throw</a> Exception('Failed to load data'); } } @override Widget build(BuildContext context) { return FutureBuilder<List<String>>( future: fetchData(), builder: (BuildContext context, AsyncSnapshot<List<String>> snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center(child: CircularProgressIndicator()); } else if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}')); } else if (snapshot.hasData) { List<String> titles = snapshot.data!; return ListView.builder( itemCount: titles.length, itemBuilder: (context, index) { return ListTile(title: Text(titles[index])); }, ); } else { return Center(child: Text('No data found')); } }, ); } } ``` 코드 설명 1. fetchData() : 이 함수는 HTTP <a href='https://sangseek.com/sangseeks/GET 요청/ko'>GET 요청</a>을 통해 데이터를 가져옵니다. 성공적으로 데이터를 가져오면 JSON을 파싱하여 제목 목록을 반환합니다. 실패할 경우 예외를 발생시킵니다. 2. FutureBuilder : `FutureBuilder`는 `fetchData()`를 호출하여 `Future`를 생성합니다. `builder` 속성에서 `AsyncSnapshot`을 사용하여 비동기 작업의 상태를 확인합니다. 3. snapshot.connectionState : 이 속성을 통해 현재 비동기 작업의 상태를 확인할 수 있습니다. `ConnectionState.waiting`일 경우 로딩 <a href='https://sangseek.com/sangseeks/인디케이터/ko'>인디케이터</a>를 표시합니다. 4. snapshot.hasError : 에러가 발생한 경우 에러 메시지를 표시합니다. 5. snapshot.hasData : 데이터가 성공적으로 로드된 경우, 리스트 뷰를 사용하여 데이터를 표시합니다. 추가 팁 - 상태 관리 : `FutureBuilder`는 비동기 작업의 상태를 관리하는 데 유용하지만, 복잡한 상태 관리가 필요한 경우 `Provider`, `Bloc`, `Riverpod`와 같은 상태 관리 패턴을 고려하는 것이 좋습니다. - 재사용성 : `FutureBuilder`를 여러 곳에서 사용해야 하는 경우, 별도의 위젯으로 분리하여 재사용성을 높일 수 있습니다. - 에러 처리 : 에러 처리를 더 세밀하게 하고 싶다면, 다양한 에러 유형에 따라 다른 UI를 제공할 수 있습니다. - Refresh : 데이터를 새로 고침해야 하는 경우, `FutureBuilder`의 `future` 속성을 업데이트하여 새로운 `Future`를 제공하면 됩니다. 이와 같이 `FutureBuilder`는 Flutter에서 비동기 작업을 처리하고 UI를 업데이트하는 데 매우 유용한 도구입니다. 다양한 상황에서 활용할 수 있으며, 비동기 프로그래밍의 복잡성을 줄여줍니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기