问题描述
我正在使用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。我知道runMutation
或result
都不是期货,因此无法等待。 hasException
和loading
也会出现,并且视情况而定为假或真。是否有人注意到发生了什么事情,可能导致result.data
始终为空?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)