Graphql_flutter runMutation的QueryResult返回null,尽管变异执行正确

问题描述

我正在使用graphql_Flutter 3.1.0并已开始对我的应用程序进行身份验证,并且需要在成功创建后将用户设置为我的提供者状态。我目前对createuser的更改是:

final String createuserMutation = """
mutation createuser(\$firstName: String!,\$username: String!,\$phoneNumber: String!) {
  createuser(firstName: \$firstName,username: \$username,phoneNumber: \$phoneNumber,role: USER) {
    id,firstName,username,phoneNumber,role
  }
}
""";

这成功在我的Neo4j数据库中创建了用户。如果我在GraphQL界面中运行相同的查询,则得到的响应将完全符合预期:

{
  "data": {
    "createuser": {
      "id": "e2a44525-fd46-4aae-8e00-38d263b769e6","firstName": "Sam","username": "sgamgee","phoneNumber": "3216543216","role": "USER"
    }
  }
}

在我的SignupForm小部件中,我将表单包装在Mutation中,并将createuserMutation传递给Mutationoptions,如下所示:

class SignupFormState extends State<SignupForm> {
  final _formKey = GlobalKey<FormState>();

  final user = User();

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: EdgeInsets.all(35),child: Mutation(
        options: Mutationoptions(
          documentNode: gql(createuserMutation)
        ),builder: (RunMutation runMutation,QueryResult result) {
          return UserCreateForm(
            formKey: _formKey,user: user,runMutation: runMutation,result: result
          );
        },)
    );
  }
}

到目前为止一切都很好,没有错误。当我尝试通过onpressed闭包提交表单时:

onpressed: () async {
  final form = _formKey.currentState;
  if (form.validate()) {
    form.save();
                    
    runMutation({
      'firstName': user.firstName,'username': user.username,'phoneNumber': user.phoneNumber
    });
                    
    if (result.hasException) {
      return AlertBox(
        type: AlertType.error,text: result.exception.toString()
      );
    } else if (result.loading) {
      return const Center(
        child: CircularProgressIndicator(),);
    } else {
      // NOTE: result.data is null though the mutation is running successfully. 
      var createdUser = result.data['createuser'];
      Provider.of<UserProvider>(context,listen: false).signUp(createdUser);
                      
      if (Provider.of<UserProvider>(context,listen: false).isAuthenticated()) {
        Navigator.pushReplacementNamed(context,'/signup-success');
      } else {
        Navigator.pushReplacementNamed(context,'/signup');
      }
    }
  }
}

result.data始终为null。我知道runMutationresult都不是期货,因此无法等待。 hasExceptionloading也会出现,并且视情况而定为假或真。是否有人注意到发生了什么事情,可能导致result.data始终为空?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)