> Frontend/Flutter

Flutter_19. HTTP Requests

Janku 2023. 5. 31. 08:02

 

 

 

0. 학습내용

  • Http Request

 

1. HTTP Request 

 

   1) http package 설치 

 

 

   2) http package 설치 

 

import 'package:http/http.dart' as http;


3) FireBase  > Realtime Database 생성 > (생략)

 

 

 

 

4) Get Method 사용

void _loadItems() async {
  final url = Uri.https(
      'URL 주소.app',
      '[firebase bucket 이름 ].json');
  final response = await http.get(url);
  if (response.statusCode >= 400) {
    setState(() {
      _error = 'Failed to fetch Data';
    });
  }
  final Map<String, dynamic> listData = json.decode(response.body);
  final List<GroceryItem> loadedItems = [];
  for (final item in listData.entries) {
    final category = categories.entries
        .firstWhere(
            (catItem) => catItem.value.title == item.value['category'])
        .value;
    loadedItems.add(GroceryItem(
        id: item.key,
        name: item.value['name'],
        quantity: item.value['quantity'],
        category: category));
  }
  setState(() {
    _groceryItems = loadedItems;
    _isLoading = false;
  });
}

 

-   Uri .https 를 사용하여, params 로 주소와 [이름].json을 을 넣어주고, 해당 값을 보내준다 (get으로).

 

5) Delete Method 사용 

final url = Uri.https(
    'URL 주소',
    '[firebase bucket 이름 ]/${id값}.json');

final response = await http.delete(url);

 

 

6) Post Method 사용 

final url = Uri.https(
      'URL 주소.app',
      '[firebase bucket 이름 ].json');

final response = await http.post(url,
    headers: {'Content-Type': 'application/json'},
    body: json.encode({
      'name': _enteredName,
      'quantity': _enteredQuantity,
      'category': _selectedCategory.title,
    }));

final Map<String, dynamic> resData = json.decode(response.body);

 

 

-  Request를 보낼 때, headers | body에 값을 넣어서 보낸다. 

-  Post 방식의 경우, 기본적으로 HTTP Package는 기본적으로 serialized format (예:JSON 형식)의 값을 받기를 기대하기 때문에, 

json.encode({...})를 통해 obj 값을 JSON 형식으로 변경.