Flutter 颤振图';s QueryResult返回null,但变异正在正确执行
我正在使用graphql_颤振3.1.0,已经开始对我的应用程序进行身份验证,并且需要在成功创建时将用户设置为我的提供商状态。我对CreateUser的修改当前为: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: \
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
始终为空的情况