본문 바로가기

[Flutter] 플러터에서의 Database연동 및 API 통신

I'm 영서 2023. 8. 17.
반응형

 

플러터를 포함한 모바일 개발시 DB를 직접 넣어선 안된다. 

 

디컴파일이 되어 db정보를 노출할 수 있기 때문인데, 

때문에 플러터에서 database를 직접 연동하기 위해선 앱 내부에서만 사용하는 로컬 Database를 사용하는 방법과

API서버를 통한 API 통신을 하는 방법이 있다.

 

이중 API통신에 대해서 작성하였다.

 

먼저 http 라이브러리의 의존성을 추가해준다.

  http: ^0.13.5

소스에 http.dart를 가져와 

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

 

body에 날려 보내는방법, url에 파라미터로 날리는 방법 등 자바, C#등에서 사용하는 방법으로 전부 사용 가능하다.

 

 

1. GET


class AdvAPI {
  Future<List<AdvModel>> getAdvertisement(String link) async {
    final response = await http.get(Uri.parse("${SERVER_URL}${link}"));
    print('response.body : ${response.body}');
    if (response.statusCode == 200) {
      List<dynamic> jsonList = jsonDecode(utf8.decode(response.bodyBytes));

      List<AdvModel> advList =
          jsonList.map((json) => AdvModel.fromJson(json)).toList();
      return advList;
    } else {
      throw Exception('Failed to load wine types');
    }
  }
}

 

2.POST

Future<List<AeratorModel>?> className(String link, Model model) async {
    var url = Uri.parse(
        '${SERVER_URL}{link}?uuid=${LoginStatus().user_uuid}');
    var headers = {'Content-Type': 'application/json'};
    var response = await http.post(url,
        headers: headers, body: jsonEncode(model.toJson()));

    if (response.statusCode == 200) {
      if (response.body.isNotEmpty) {
        List<dynamic> result = jsonDecode(utf8.decode(response.bodyBytes));

        List<AeratorModel> aeratorList =
            result.map((e) => AeratorModel.fromJson(e)).toList();
        return aeratorList;
      } else {
        return null;
      }
      // HTTP 요청이 성공적으로 처리됐을 때
    } else if (response.statusCode == 404) {
      return null;
    } else {
      // HTTP 요청이 실패했을 때
      throw Exception('Failed to load screens');
    }
  }

3. DELETE


  Future<void> className(String link,String userAeratorUuid) async {
    final url = Uri.parse('${SERVER_URL}{link}');
    final response = await http.delete(
      url,
      body: {'userAeratorUuid': userAeratorUuid},
    );

    if (response.statusCode == 200) {
      // 성공적으로 삭제되었을 경우 실행할 코드 작성
      print('추가 성공');
    } else {
      // 삭제 실패시 실행할 코드 작성
    }
  }
반응형

댓글