Flutter 颤振图';s QueryResult返回null,但变异正在正确执行

Flutter 颤振图';s QueryResult返回null,但变异正在正确执行,flutter,dart,graphql,graphql-mutation,flutter-graphql,Flutter,Dart,Graphql,Graphql Mutation,Flutter Graphql,我正在使用graphql_颤振3.1.0,已经开始对我的应用程序进行身份验证,并且需要在成功创建时将用户设置为我的提供商状态。我对CreateUser的修改当前为: final String createUserMutation = """ mutation CreateUser(\$firstName: String!, \$username: String!, \$phoneNumber: String!) { CreateUser(firstName: \

我正在使用graphql_颤振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
          );
        },
      )
    );
  }
}
类SignupFormState扩展状态{
final _formKey=GlobalKey();
最终用户=用户();
@凌驾
小部件构建(构建上下文){
返回容器(
填充:边缘设置。全部(35),
儿童:突变(
选项:变异选项(
documentNode:gql(createUserMutation)
),
生成器:(运行变异,查询结果){
返回UserCreateForm(
formKey:_formKey,
用户:用户,,
运行突变:运行突变,
结果:结果
);
},
)
);
}
}
到目前为止一切顺利,没有错误。当我试图通过按下的关闭按钮提交表格时:

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');
      }
    }
  }
}
onPressed:()异步{
最终形式=_formKey.currentState;
if(form.validate()){
form.save();
运行突变({
“firstName”:user.firstName,
“用户名”:user.username,
“phoneNumber”:user.phoneNumber
});
if(result.hasException){
返回警报框(
类型:AlertType.error,
text:result.exception.toString()
);
}else if(结果加载){
返回常数中心(
子对象:CircularProgressIndicator(),
);
}否则{
//注意:尽管变异正在成功运行,result.data为null。
var createdUser=result.data['CreateUser'];
Provider.of(context,listen:false).signUp(createdUser);
if(Provider.of(context,listen:false).isAuthenticated()){
pushReplacementNamed(上下文“/signup success”);
}否则{
pushReplacementNamed(上下文“/signup”);
}
}
}
}
result.data始终为空。我知道
runMutation
result
都不是未来,因此不能等待。此外,
hasException
loading
也存在,视情况而定,为假或真。是否有人注意到任何其他可能导致
result.data
始终为空的情况