【问题标题】:Flutter graphql query, variables will not update, not sending the latest queryFlutter graphql查询,变量不会更新,不发送最新查询
【发布时间】:2020-07-06 21:10:33
【问题描述】:

我设置了以下变量。 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)),
                  );
                })

【问题讨论】:

    标签: flutter graphql mobile-development


    【解决方案1】:

    主要问题是您将 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
        }
      }
    ''';
    

    这将使用input variables 参数化突变,并使用r 标记转义字符串以防止插值。您的原始代码在 dartpad 中运行产生

    mutation {
      addUserManual(name:"null",password:"",premium:false,email:"dasa"){
        userid
      }
    }
    

    这是一个静态mutation,其中硬编码了变量。

    【讨论】:

      猜你喜欢
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2019-05-24
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多