개발/flutter

Flutter-graphQL 쿼리 리턴값 데이터 모델링하기

덤벨로퍼 2020. 10. 12. 13:45

지난글

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 을 사용할수있다.

 

 

 

추후 포스팅

 

에러 핸들링하기

페이지 네이션 하기