상세 컨텐츠

본문 제목

Flutter 네트워크 통신 기초: HTTP 요청 보내기

공부/Flutter

by micalcomanie 2025. 1. 6. 20:40

본문

728x90
반응형
SMALL

Flutter 네트워크 통신 기초: HTTP 요청 보내기

Flutter에서 네트워크 통신은 외부 API와 데이터를 교환하거나 앱에서 실시간 정보를 표시하는 데 필수적입니다.
이 글에서는 HTTP 요청을 보내고 응답을 처리하는 기본적인 방법을 알아봅니다.


1. HTTP 패키지 설치

Flutter에서 HTTP 요청을 처리하려면 http 패키지를 사용합니다. 다음 단계를 따라 설정합니다.

1.1 pubspec.yaml에 패키지 추가

dependencies:
  http: ^latest_version

1.2 패키지 설치

터미널에서 다음 명령어를 실행합니다:

flutter pub get

2. GET 요청 보내기

GET 요청은 서버에서 데이터를 가져오는 데 사용됩니다.

2.1 코드 예제: 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'),
          ],
        ),
      ),
    );
  }
}

2.2 실행 결과

  • 버튼을 클릭하면 서버에서 데이터를 가져와 화면에 표시합니다.

3. POST 요청 보내기

POST 요청은 서버에 데이터를 전송할 때 사용됩니다.

3.1 코드 예제: 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'),
          ],
        ),
      ),
    );
  }
}

3.2 실행 결과

  • 버튼을 클릭하면 서버에 데이터를 전송하고 생성된 리소스 ID를 화면에 표시합니다.

4. 에러 처리

네트워크 요청은 다양한 에러 상황이 발생할 수 있으므로 이를 처리하는 것이 중요합니다.

4.1 일반적인 에러 처리 방법

  • 타임아웃: 요청 시간이 초과될 경우를 처리합니다.
  • 상태 코드 확인: 서버 응답 코드에 따라 적절한 동작을 수행합니다.
  • try-catch 블록: 예외 상황을 처리합니다.

4.2 타임아웃 처리 예제

try {
  final response = await http.get(url).timeout(Duration(seconds: 5));
  if (response.statusCode == 200) {
    // 데이터 처리
  }
} catch (error) {
  print('Error: $error');
}

5. JSON 데이터 처리

Flutter에서는 dart:convertjson.decodejson.encode를 사용하여 JSON 데이터를 처리합니다.

5.1 JSON 디코딩

final decodedData = json.decode(response.body);
print(decodedData['title']);

5.2 JSON 인코딩

final encodedData = json.encode({'key': 'value'});
print(encodedData);

6. 결론

Flutter에서 HTTP 요청을 보내고 응답을 처리하는 것은 네트워크 기반 앱 개발의 기본입니다.
GET과 POST 요청을 이해하고 적절한 에러 처리를 추가하여 안정적인 네트워크 통신을 구현해 보세요.
다음 글에서는
REST API와의 고급 통신을 다룰 예정입니다.


참고 자료

728x90
반응형
LIST

관련글 더보기