-
Flutter - graphQL 인자값 넣어서 Mutation 하기개발/flutter 2020. 10. 6. 17:33
지난번에 간단한 쿼리를 보내 결과값을 받는 테스트까지 해보았다.
이번에는 간단한 mutation 을 실행해보려한다.
mutation 은 이렇게 되어있다.
mutation{ updatePassword(input: $input) }
유저의 비밀번호를 변경할것이며 input 값에는 기존 비밀번호 , 새로운 비밀번호가 들어잇는 Map 타입이될것이다.
{ oldPassword:xxxxx newPassword:yyyyy }
지난번과 같은 구조로 getGraphqlClient 를 사용해 서버와 통신할것이다.
Future<bool> updatePasswordConnection(UpdatePasswordModel model) { return getGraphQLClient() .query(_queryOptions(model)) .then(_toUpdatePasword); }
graphQL클라이언트를 불러와 쿼리옵션으로 통신하고
결과값을 _toUpdatePasword (password오타) 로 보낸다.
지난번과달리 model 이라는 인자를 받아와 쿼리옵션에 넣어줬다.
이 model 안에 기존비밀번호 & 새 비밀번호 정보가 있다.
쿼리 옵션부터 보자
QueryOptions _queryOptions(UpdatePasswordModel model) { return QueryOptions( fetchPolicy: FetchPolicy.networkOnly, documentNode: gql(_readUserConnectionQuery(model.toJSON()))); } //쿼리 String _readUserConnectionQuery(Map<String, String> input) => ''' mutation{ updatePassword(input: $input) } ''';
model 을 인자로 받아와 쿼리에 넣어준다.
toJSON은 model을 UpdatePasswordModel 타입에서 Map 타입으로 변환해 준다.
결국 이런식으로 서버에게 요청할것이다
mutation{ updatePassword(input: { oldPassword:"oldPassword123" newPassword:"newPassword1234" }) }
저렇게 "" 큰따옴표 안에 String 이 들어가있지않으면 에러를 리턴할것이다.
따라서 큰따옴표 안에 String 을 넣어주던지
toJSON() 함수에서 json.encode함수를 사용해줘야한다.
Map<String, String> toJSON() => <String, String>{ 'oldPassword': json.encode(oldPassword), 'newPassword': json.encode(newPassword), };
결과값은 _toUpdatePassword에 리턴될것이다.
bool _toUpdatePasword(QueryResult queryResult) { if (queryResult.hasException) { throw queryResult.exception; } final bool result = queryResult.data['updatePassword']; return result; }
'개발 > flutter' 카테고리의 다른 글
Flutter-grapqhQL 인자 값 넣어서 쿼리보내기 (0) 2020.10.13 Flutter-graphQL 쿼리 리턴값 데이터 모델링하기 (0) 2020.10.12 Flutter - GraphQL 세팅 및 쿼리 하는방법 (0) 2020.09.29 카카오 로그인에러 AUTHORIZATION_FAILED: invalid android_key_hash or ios_bundle_id or web_site_url (0) 2020.09.24 Flutter-Your Xcode version may be too old for your iOS version 에러해결 (0) 2020.09.22