问题描述
我是 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 中运行。