상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - Flutter에서 네트워크 요청을 처리하는 방법은 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
Flutter에서 네트워크 요청을 처리하는 방법은 여러 가지가 있지만, 가장 일반적으로 사용되는 방법은 `http` 패키지를 사용하는 것입니다. 이 패키지는 <a href='https://sangseek.com/sangseeks/RESTful API/ko'>RESTful API</a>와의 통신을 간편하게 해주며, GET, POST, PUT, DELETE 등의 HTTP 메서드를 지원합니다. 아래에서는 Flutter에서 네트워크 요청을 처리하는 방법을 단계별로 설명하겠습니다. 1. `http` 패키지 설치 먼저, `http` 패키지를 프로젝트에 추가해야 합니다. `pubspec.yaml` 파일을 열고 다음과 같이 추가합니다. ```yaml dependencies: flutter: sdk: flutter http: ^0.13.3 최신 버전으로 업데이트하세요. ``` 그 후, 터미널에서 `flutter pub get` 명령어를 실행하여 패키지를 설치합니다. 2. 네트워크 요청 만들기 이제 네트워크 요청을 만드는 방법을 살펴보겠습니다. 기본적인 GET 요청과 POST 요청을 예로 들어 설명하겠습니다. GET 요청 GET 요청은 서버에서 데이터를 가져오는 데 사용됩니다. 다음은 JSONPlaceholder API를 사용하여 GET 요청을 보내는 예제입니다. ```dart import 'dart:convert'; import 'package:http/http.dart' as http; F<a href='https://sangseek.com/sangseeks/uture/ko'>uture</a><void> 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); print(data); } else { // 요청이 실패했을 때 <a href='https://sangseek.com/sangseeks/throw/ko'>throw</a> Exception('Failed to load data'); } } ``` POST 요청 POST 요청은 서버에 데이터를 전송하는 데 사용됩니다. 다음은 POST 요청을 보내는 예제입니다. ```dart Future<void> <a href='https://sangseek.com/sangseeks/createPost/ko'>createPost</a>() async { final response = await http.post( Uri.parse('https://jsonplaceholder.typicode.com/posts'), headers: <String, String>{ 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode(<String, String>{ 'title': 'foo', 'body': 'bar', 'userId': '1', }), ); if (response.statusCode == 201) { // 요청이 성공적으로 완료되었을 때 print('Post created: ${response.body}'); } else { // 요청이 실패했을 때 throw Exception('Failed to create post'); } } ``` 3. 비동기 처리 Flutter에서 네트워크 요청은 <a href='https://sangseek.com/sangseeks/비동기적/ko'>비동기적</a>으로 처리됩니다. 따라서 `async`와 `await` 키워드를 사용하여 비동기 작업을 처리해야 합니다. 위의 예제에서 `fetchData`와 `createPost` 함수는 비동기 함수로 정의되어 있으며, `await`를 사용하여 HTTP 요청이 완료될 때까지 기다립니다. 4. 에러 처리 네트워크 요청을 할 때는 항상 에러 처리를 고려해야 합니다. 위의 예제에서는 `statusCode`를 확인하여 요청이 성공했는지 확인하고, 실패했을 경우 예외를 발생시킵니다. 추가적으로 `<a href='https://sangseek.com/sangseeks/try-catch/ko'>try-catch</a>` 블록을 사용하여 네트워크 오류를 처리할 수 있습니다. ```dart Future<void> fetchData() async { try { final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts')); if (response.statusCode == 200) { List<dynamic> data = json.decode(response.body); print(data); } else { throw Exception('Failed to load data'); } } catch (e) { print('Error: $e'); } } ``` 5. 상태 관리 네트워크 요청을 통해 가져온 데이터를 UI에 반영하기 위해 상태 관리가 필요합니다. Flutter에서는 `Provider`, `Riverpod`, `Bloc`, `<a href='https://sangseek.com/sangseeks/GetX/ko'>GetX</a>` 등 다양한 상태 관리 패턴을 사용할 수 있습니다. 예를 들어, `Provider`를 사용하여 데이터를 관리하는 방법은 다음과 같습니다. ```dart import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; class <a href='https://sangseek.com/sangseeks/PostProvider/ko'>PostProvider</a> with ChangeNotifier { List<dynamic> _posts = []; List<dynamic> get posts => _posts; Future<void> fetchPosts() async { final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts')); if (response.statusCode == 200) { _posts = json.decode(response.body); notifyListeners(); } else { throw Exception('Failed to load posts'); } } } ``` 이제 `PostProvider`를 사용하여 UI에서 데이터를 쉽게 가져올 수 있습니다. 6. UI와 연결하기 마지막으로, 네트워크 요청을 통해 가져온 데이터를 UI에 표시하는 방법입니다. `<a href='https://sangseek.com/sangseeks/ChangeNotifierProvider/ko'>ChangeNotifierProvider</a>`를 사용하여 `PostProvider`를 제공하고, `Consumer`를 사용하여 데이터를 표시합니다. ```dart import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; void main() { runApp( ChangeNotifierProvider( create: (context) => PostProvider(), child: MyApp(), ), ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return <a href='https://sangseek.com/sangseeks/MaterialApp/ko'>MaterialApp</a>( home: Scaffold( appBar: AppBar(title: Text('Network Request Example')), body: Consumer<PostProvider>( builder: (context, postProvider, child) { return FutureBuilder( future: postProvider.fetchPosts(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center(child: CircularProgressIndicator()); } else if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}')); } else { return ListView.builder( itemCount: postProvider.posts.length, itemBuilder: (context, index) { return ListTile( title: Text(postProvider.posts[index]['title']), ); }, ); } }, ); }, ), ), ); } } ``` 결론 Flutter에서 네트워크 요청을 처리하는 방법은 간단하고 직관적입니다. `http` 패키지를 사용하여 GET 및 POST 요청을 쉽게 구현할 수 있으며, 비동기 처리를 통해 UI와의 상호작용을 원활하게 할 수 있습니다. 상태 관리 패턴을 사용하여 데이터를 효율적으로 관리하고, UI에 반영하는 방법도 다양합니다. 이러한 기법들을 활용하여 Flutter 애플리케이션에서 네트워크 요청을 효과적으로 처리할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기