Flutter GraphQLError 字段需要类型 String,找到 String

问题描述

我是 GraphQl 的新手,我想使用我在 Laravel 中实现的这个查询

type Query {
    loginAccount(mobile_number:String
        @rules(apply:["required","min:11","max:11"])
    ):ResponseResultWithMessage
}

type ResponseResultWithMessage{
    result:Int,title:String
    description:String
}

当我测试这个查询时,这个查询对我来说很好,但是当我尝试在 Flutter 上实现它时,我收到这个错误

I/Flutter (20938): OperationException(linkException: null,graphqlErrors: [GraphQLError(message: Field "loginAccount" 参数“mobile_number”需要类型字符串,找到字符串。, 位置:[ErrorLocation(line: 3,column: 31)],path: null,extensions: {类别:graphql})])

我的代码

class _Login extends State<Login> {
  final _formKey = GlobalKey<FormState>();
  final sample = r'''
      query {
        loginAccount(mobile_number:String) {
          result
          title
          description
        }
      }
  ''';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        //...
        body: Query(
            options: QueryOptions(document: gql(sample),variables:<String,dynamic> {
              'mobile_number': '0123456789',}),builder: (QueryResult result,{ VoidCallback refetch,FetchMore fetchMore }) {
              if (result.hasException) {
                debugPrint(result.exception.toString());

                return Text(result.exception.toString());
              }

              if (result.isLoading) {
                return const Text('Loading');
              }

              debugPrint('$result');

              return Container();
            }
        ));
  }
}

解决方法

你的错误在这里,

query {
        loginAccount(mobile_number:String) {    //<-- mobile_number:String error!!
          result
          title
          description
        }
      }

您需要一个数字,但您正在传递字符串(此处字符串不是变量,您可以将字母分配给常量 String)。

我在我的项目中做了这样的事情,其中​​“${txt.text}”作为动态变量

 query recipes {
  recipes(where: {name: {_similar: "${txt.text}"}}) {
    id
    name
    description
    ingredients {
      id
      name
    }
  }
}

你也可以先在一些控制台中尝试查询,然后在 flutter 中运行。