Flutter에서 네트워크 통신은 외부 API와 데이터를 교환하거나 앱에서 실시간 정보를 표시하는 데 필수적입니다.
이 글에서는 HTTP 요청을 보내고 응답을 처리하는 기본적인 방법을 알아봅니다.
Flutter에서 HTTP 요청을 처리하려면 http 패키지를 사용합니다. 다음 단계를 따라 설정합니다.
dependencies:
http: ^latest_version
터미널에서 다음 명령어를 실행합니다:
flutter pub get
GET 요청은 서버에서 데이터를 가져오는 데 사용됩니다.
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class GetRequestExample extends StatefulWidget {
@override
_GetRequestExampleState createState() => _GetRequestExampleState();
}
class _GetRequestExampleState extends State {
String? _responseData;
Future fetchData() async {
final url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');
try {
final response = await http.get(url);
if (response.statusCode == 200) {
final data = json.decode(response.body);
setState(() {
_responseData = data['title'];
});
} else {
print('Failed to load data');
}
} catch (error) {
print('Error: $error');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('GET Request Example')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: fetchData,
child: Text('Fetch Data'),
),
SizedBox(height: 20),
_responseData != null ? Text(_responseData!) : Text('No data fetched'),
],
),
),
);
}
}
POST 요청은 서버에 데이터를 전송할 때 사용됩니다.
class PostRequestExample extends StatefulWidget {
@override
_PostRequestExampleState createState() => _PostRequestExampleState();
}
class _PostRequestExampleState extends State {
String? _responseMessage;
Future sendData() async {
final url = Uri.parse('https://jsonplaceholder.typicode.com/posts');
final body = json.encode({
'title': 'Flutter POST Request',
'body': 'This is a test post',
'userId': 1,
});
try {
final response = await http.post(
url,
headers: {'Content-Type': 'application/json'},
body: body,
);
if (response.statusCode == 201) {
final data = json.decode(response.body);
setState(() {
_responseMessage = 'Post created: ${data['id']}';
});
} else {
print('Failed to send data');
}
} catch (error) {
print('Error: $error');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('POST Request Example')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: sendData,
child: Text('Send Data'),
),
SizedBox(height: 20),
_responseMessage != null ? Text(_responseMessage!) : Text('No response yet'),
],
),
),
);
}
}
네트워크 요청은 다양한 에러 상황이 발생할 수 있으므로 이를 처리하는 것이 중요합니다.
try {
final response = await http.get(url).timeout(Duration(seconds: 5));
if (response.statusCode == 200) {
// 데이터 처리
}
} catch (error) {
print('Error: $error');
}
Flutter에서는 dart:convert의 json.decode와 json.encode를 사용하여 JSON 데이터를 처리합니다.
final decodedData = json.decode(response.body);
print(decodedData['title']);
final encodedData = json.encode({'key': 'value'});
print(encodedData);
Flutter에서 HTTP 요청을 보내고 응답을 처리하는 것은 네트워크 기반 앱 개발의 기본입니다.
GET과 POST 요청을 이해하고 적절한 에러 처리를 추가하여 안정적인 네트워크 통신을 구현해 보세요.
다음 글에서는 REST API와의 고급 통신을 다룰 예정입니다.
JSON 데이터 파싱: Flutter에서 효율적으로 다루는 방법 (0) | 2025.01.07 |
---|---|
물리 효과를 활용한 고급 애니메이션 구현 (1) | 2025.01.03 |
제스처와 고급 물리 효과를 결합하는 방법 (0) | 2025.01.03 |
제스처와 애니메이션 결합하기 (0) | 2025.01.03 |
버튼 클릭 시 색상 변화 애니메이션 구현하기 (0) | 2025.01.03 |