Как генерировать запросы и экспорт строки мутации из schema.graphql

avatar
HackRx
8 августа 2021 в 20:18
166
1
0

Я создаю приложение флаттера и использую amplify_flutter 0.2.1 и amplify v5.1.0 , когда я извлекаю проект из пользовательского интерфейса Amplify-admin, он генерирует схему graphQL schema.graphql, которая бесполезна во внешнем интерфейсе, потому что для извлечения или изменения документа каждый раз нам нужно писать документ запроса graphQL следующим образом:

String graphQLDocument =
        '''mutation CreateTodo(\$name: String!  \$description: String) {
              createTodo(input: {name: \$name, description: \$description}) {
                id
                name
                description
              }
        }''';

    var operation = Amplify.API.mutate(
        request: GraphQLRequest<String>(document: graphQLDocument, variables: {
      'name': 'my first todo',
      'description': 'todo description',
    }));


Официальный CRUD-документ Amplify Flutter

Я хочу написать так:

const input = {
name,
description

};
const output = {
id,name,description
};
var graphQLDoc = createToDO(input,output); // it should return the string object according to the input and output passed.

    var operation = Amplify.API.mutate(
        request: GraphQLRequest<String>(document: graphQLDoc, variables: {
      'name': 'my first todo',
      'description': 'todo description',
    }));

ИЛИ его можно расширить следующим образом:

const input = {
name:"hackrx",
description: "this works cool"

};
const output = {
id,name,description
};
var graphQLQueryRes = await createToDO(input,output); // it should return the whole fetched object according to the output passed.

     
Источник

Ответы (1)

avatar
zeia soroush
19 августа 2021 в 09:26
1

вы можете сделать так, как я использую в своем коде:

String myMutation(name, description) {
var graphQLDocument = '''mutation CreateTodo {
   createTodo(input: {name: $name, description: $description}) {
      id
      name
      description
      }
   }
   ''';
return graphQLDocument;  
}

var operation = Amplify.API.mutate(
      request:
          GraphQLRequest<String>(document: myMutation('john', 'doe')));

для получения ответа: вы можете запустить amplify codegen models в терминале, который генерирует модели данных на основе ваших таблиц schema.graphql. и после этого вы можете сделать это так: например, у вас есть таблица пользователей

User.fromJson(operation.response.data['createToDo]);

теперь у вас есть объект пользовательского класса.

HackRx
15 сентября 2021 в 22:09
0

Спасибо @zeiasorush за ответ, он мне очень помог.

zeia soroush
17 сентября 2021 в 10:11
0

рад это слышать