Flutter-graphQL 쿼리 리턴값 데이터 모델링하기
지난글
2020/10/06 - [개발/flutter] - Flutter - graphQL 인자값 넣어서 Mutation 하기
데이터 모델링 하기
지난번에는 String 이나 boolean 같은 원시타입의 값을 리턴 받아 보는것을 해봤다.
이번엔 단순한 쿼리문을 사용해 받은 여러개의 데이터를 가지고
하나의 클래스로 모델링한후 리턴해보려한다.
쿼리문은 다음과같다.
{
servicePolicyInfo {
serviceUseTermsUrl
couponPolicyUrl
pointPolicyUrl
personalInfoUrl
locationUseTermsUrl
}
}
serviceUseTermsUrl
couponPolicyUrl
pointPolicyUrl
personalInfoUrl
locationUseTermsUrl
이 다섯개의 url 을 리턴 받을것이며 모두 String 타입이다.
위 값들을 적용해 ServicePoilicyInfoModel을 이런식으로 만들면된다.
class ServicePolicyInfoModel {
ServicePolicyInfoModel(
{this.couponPolicyUrl,
this.locationUseTermsUrl,
this.personalInfoUrl,
this.pointPolicyUrl,
this.serviceUseTermsUrl,
});
factory ServicePolicyInfoModel.fromJson(Map<String, dynamic> json) {
return ServicePolicyInfoModel(
couponPolicyUrl: json['couponPolicyUrl'],
locationUseTermsUrl: json['locationUseTermsUrl'],
personalInfoUrl: json['personalInfoUrl'],
pointPolicyUrl: json['pointPolicyUrl'],
serviceUseTermsUrl: json['serviceUseTermsUrl'],
);
}
String couponPolicyUrl;
String elecTermsUrl;
String locationUseTermsUrl;
String personalInfoUrl;
String pointPolicyUrl;
}
factory를 사용해 인스턴스를 만들수 있는데
ServicePolicyInfoModel.fromJson()에 graphql 리턴값을 넣어주면
json 형태로 받은 리턴값을 factory를 사용해
ServicePolicyInfoModel 인스턴스 값으로 만들어 리턴해준다.
Future<ServicePolicyInfoModel> servicePolicyInfo() {
return getGraphQLClient()
.query(_queryOptions())
.then(_toServicePolicyInfo);
}
QueryOptions _queryOptions() {
return QueryOptions(
fetchPolicy: FetchPolicy.networkOnly,
documentNode: gql(_readServicePolicyInfoQuery()));
}
그래프큐엘 클라이언트 가져와서 쿼리옵션으로 쿼리 보내고 서버로부터 값을 받아와 _toservicepolicyInfo 에서 처리할것이다.
자세한내용은
2020/09/29 - [개발/flutter] - Flutter - GraphQL 세팅 및 쿼리 하는방법
ServicePolicyInfoModel _toServicePolicyInfo(QueryResult queryResult) {
if (queryResult.hasException) {
throw queryResult.exception;
}
final dynamic servicePolicyInfoJson = queryResult.data['servicePolicyInfo'];
final servicePolicyInfo =
ServicePolicyInfoModel.fromJson(servicePolicyInfoJson);
return servicePolicyInfo;
}
에러없이 값이 서버로부터 리턴되었다면 값은 json 형태로 돌아온다.
따라서 queryResult.data['servicePolicyInfo'] 이렇게 값을 가져올수있다.
그리고 아까 만들었던모델에서
ServicePolicyInfoModel.fromJson() 을 사용해 그값을 ServicePolicyInfoModel 인스턴스로 변환하여 리턴하면
값을 받은곳에서는 ServicePolicyInfoModel 을 사용할수있다.
추후 포스팅
에러 핸들링하기
페이지 네이션 하기