flutter - Flutter graphql查询,变量不会更新,不发送最新查询
问题描述
我设置了以下变量。registerUser 是 graphQL api 调用。我希望 $name、$password、$premium 和 $email 是在按下按钮时确定的动态变量(注册)。这段代码都在一个有状态的小部件中。
String name;
String password = "";
bool premium = false;
String email = "dasa";
String registerUser = '''
mutation {
addUserManual(name:"$name",password:"$password",premium:$premium,email:"$email"){
userid
}
}
'''
然后我像这样为每个 graphql_flutter 插件定义一个突变。在 runmutation({.. 发送到服务器的突变是上面初始定义变量的突变,它不发送最近的查询。有谁知道如何从字段更新 vvalue,然后将其插入查询中?。
child: Mutation(options: MutationOptions(
documentNode: gql(registerUser),
update: (Cache cache, QueryResult result) {
return cache;
},
// or do something with the result.data on completion
onCompleted: (dynamic resultData) {
print(resultData);
},
), builder: (RunMutation runMutation, QueryResult result){
return RaisedButton(
elevation: 5,
onPressed: () {
//FIX LATER
print(result.data);
runMutation({'name':"hi",'password':"test",'premium':false,'email':"blabla"});
},
child: Text('SIGN UP'),
color: Colors.white,
shape: RoundedRectangleBorder(borderRadius: new BorderRadius.circular(30.0)),
);
})
解决方案
主要问题是您将 dart 变量与 GraphQL 变量混为一谈。GraphQL 是它自己的语言,graphql-flutter
不能将变量传递给 GraphQL,除非它们被定义为突变的参数,如下所示:
String registerUser = r'''
mutation RegisterUser($name: String!, email: String!, $password: String!, $premium: Boolean = false){
addUserManual(name: $name, password: $password, premium: $premium, email: $email){
userid
}
}
''';
这将使用输入变量参数化突变,并使用标签转义字符串r
以防止插值。您在dartpad中运行的原始代码产生
mutation {
addUserManual(name:"null",password:"",premium:false,email:"dasa"){
userid
}
}
这是一个带有硬编码变量的静态mutation
变量。
推荐阅读
- r - 仅在特定日期数的时间序列中填写 NA
- javascript - 在表中填充 json 数据
- react-native - 是否可以在本机反应中将颜色阴影添加到 TextInput
- unit-testing - react-native-firebase-messaging 用玩笑模拟
- c# - 从 C++ 到 C# 的编组字符串数组
- javascript - Mocha、Chai 和 Sequelize 在 beforeEach 中清理和设置数据
- java - 在 Windows 上使用 Java -D 选项运行 SBT 1.2.8 项目
- json - VSCode片段,将下划线分隔的小写字符串转换为CamelCase?
- java - Spring 运行时错误,没有为实体指定标识符:
- c# - StateHasChanged 是重新渲染所有组件还是仅重新渲染差异?