반응형
project/pubspec.yaml
http: 0.12.2 추가한다.
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.3
http: 0.12.2 //add
dev_dependencies:
flutter_test:
sdk: flutter
Session 제어를 위해 클래스를 만들고
그 안에서 헤더 쿠키 등 셋팅, 리스폰스의 응답을 각 상태코드에 따라서 얼럿을 띄우는 등의 작업분기를 추가한다.
Session 클래스를 생성한다.
import 'dart:convert';
import "package:http/http.dart" as http;
import 'codeCommon.dart';
class Session {
Map<String, String> headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
};
Map<String, String> cookies = {};
Future<dynamic> get(String url) async {
print('get() url: $url');
http.Response response =
await http.get(Uri.encodeFull(url), headers: headers);
final int statusCode = response.statusCode;
if (statusCode < 200 || statusCode > 400 || json == null) {
//코드 입력
}
return json.decode(utf8.decode(response.bodyBytes));
}
Future<dynamic> post(String url, dynamic data) async {
print('post() url: $url');
http.Response response = await http.post(Uri.encodeFull(url),
body: json.encode(data), headers: headers);
final int statusCode = response.statusCode;
if (statusCode < 200 || statusCode > 400 || json == null) {
//코드 입력
}
return json.decode(utf8.decode(response.bodyBytes));
}
}
final http.Response response = await new Session().post('$url/sample/user/login', null);
간단한 post 요청
요청데이터가 없는경우 null 을 넘겨주면 된다.
class ResponseVO {
final dynamic code;
final dynamic message;
final dynamic timestamp;
final dynamic response;
ResponseVO({this.code, this.message, this.timestamp, this.response});
factory ResponseVO.fromJSON(Map<String, dynamic> json) {
print('responseVO.code : ${json['code']}');
print('responseVO.message : ${json['message']}');
print('responseVO.timestamp : ${json['timestamp']}');
print('responseVO.response : ${json['response']}');
return ResponseVO(
code: json['code'],
message: json['message'],
timestamp: json['timestamp'],
response: json['response'],
);
}
}
응답 JSON을 클래스로 맵핑하여 받는 post요청시의 사용예시이다.
Server Side의 ResponseVO를 만들어서 응답데이터를 맵핑해주었다.
final ResponseVO responseVO = ResponseVO.fromJSON(await new Session().post('$url/sample/user/login', null));
if (responseVO != null) {
if (responseVO.code == SUCCESS) {
Navigator.pushNamed(context, PlazaPage.PlazaPageRouteName);
} else if (responseVO.code == SERVER_ERROR) {
showToast('error');
} else if (responseVO.code == INFORMATION_NOT_OBTAINED) {
Navigator.pushNamed(context, JoinPage.JoinPageRouteName);
}
}
header 를 넣고싶지 않으면 두번째 인자로 null 을 넘기면 된다.
현재 코드에서는 Session클래스에서 값을 미리 정해놓고 고정으로 계속 보낸다.
Map<String, String> headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
};
헤더가 정해져있어서 요청시 매번 같이 보낸다.
더 요긴하게 쓰는 방법은 쿠키를 관리하면 된다.
반응형