首页 > 解决方案 > Flutter 更新后,GraphQL 和 JSON 序列化停止正常工作

问题描述

我迁移到 Flutter 2 w/ unsound null-safety 并更新了我的 Flutter 项目中的库。之后 GraphQL 请求停止正常工作。这是一个例子。

根据服务器和应用程序日志,这是我得到的服务器响应:

responseString: {
            "data": {
              "user": {
                "id": 409,
                "info": {
                  "email": "yuri.goncharenko@diversido.io",
                  "firstName": "Yuri",
                  "lastName": "Goncharenko",
                  "avatar": "https://lh3.googleusercontent.com/a-/AOh14Gjv2BpAeTxGyhC9cupGeDFAjJb14taGAV1dznxZ=s96-c",
                  "phone": "+79118248658"
                },
                "roles": [
                  {
                    "id": 186,
                    "role": "client",
                    "myFitnessPalId": null
                  }
                ],
                "chatJwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6InR3aWxpby1mcGE7dj0xIn0.eyJqdGkiOiJTSzcyNGE0ZDM3YjEzN2FmNzI4NzkzOTVkYmFhMTlmMTEzLTE2MjU1NjY1ODIiLCJncmFudHMiOnsiaWRlbnRpdHkiOiJ1c2VyLTQwOSIsImNoYXQiOnsic2VydmljZV9zaWQiOiJJU2I2NGY2YzE4ZGQ4MjQ0ODE4NjlmZmIwNjlmZWVjZWYwIn19LCJpYXQiOjE2MjU1NjY1ODIsImV4cCI6MTYyNTU3MDE4MiwiaXNzIjoiU0s3MjRhNGQzN2IxMzdhZjcyODc5Mzk1ZGJhYTE5ZjExMyIsInN1YiI6IkFDOWNmNzA5YTgzMDliNDNhODE3MjAzYjI1ZjViNWU4NjEifQ.lcnUSIWEvk7IwmWO32mtUKwOk7lZIsl8VSUwO5ZIjkg"
              }
            }
          },
                statusCode: 200

这是解析这个对对象的响应的代码:

final role = result.data?['user']['roles'].first?['role'];
  User user;
  if (role == 'coach') {
    final response = GetUserInfoResponse<CoachRole>.fromJson(
      result.data!['user'] as Map<String, dynamic>,
    );
    user = Coach(
        id: response.id!,
        firstName: response.info!.firstName!,
        lastName: response.info!.lastName!,
        email: response.info!.email!,
        phoneNumber: response.info!.phone!,
        imageUrl: response.info!.avatar!,
        maxActiveClients: response.roles!.first!.maxActiveClients,
        inviteCode: response.roles!.first!.inviteCode,
        chatJwt: result.data!['user']['chatJwt'] as String);
  } else if (role == 'client') {
    final response = GetUserInfoResponse<ClientRole>.fromJson(
      result.data!['user'] as Map<String, dynamic>,
    );
    user = Client(
        id: response.id!,
        firstName: response.info!.firstName!,
        lastName: response.info!.lastName!,
        email: response.info!.email!,
        phoneNumber: response.info!.phone!,
        imageUrl: response.info!.avatar!,
        myFitnessPalId: response.roles!.first!.myFitnessPalId,
        chatJwt: result.data!['user']['chatJwt'] as String);
  } else {
    throw ArgumentError('Unexpected role value: ${result.data}');
  }
  return FailureOrResult.success(user);

但是获取不到角色数据,在这部分代码中 result.data 等于:

{user: {id: 409, info: null, roles: [null], chatJwt: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6InR3aWxpby1mcGE7dj0xIn0.eyJqdGkiOiJTSzcyNGE0ZDM3YjEzN2FmNzI4NzkzOTVkYmFhMTlmMTEzLTE2MjU1NjY1ODIiLCJncmFudHMiOnsiaWRlbnRpdHkiOiJ1c2VyLTQwOSIsImNoYXQiOnsic2VydmljZV9zaWQiOiJJU2I2NGY2YzE4ZGQ4MjQ0ODE4NjlmZmIwNjlmZWVjZWYwIn19LCJpYXQiOjE2MjU1NjY1ODIsImV4cCI6MTYyNTU3MDE4MiwiaXNzIjoiU0s3MjRhNGQzN2IxMzdhZjcyODc5Mzk1ZGJhYTE5ZjExMyIsInN1YiI6IkFDOWNmNzA5YTgzMDliNDNhODE3MjAzYjI1ZjViNWU4NjEifQ.lcnUSIWEvk7IwmWO32mtUKwOk7lZIsl8VSUwO5ZIjkg}}

这怎么会发生?在获得服务器响应并因此将其提供给我之间会发生什么?在 Flutter 的新 GraphQL/JSON 库中我是否遗漏了什么或做了什么改变?

相同的代码和查询在 graphql: ^3.1.0 和 json_annotation: ^3.1.0 上运行良好,现在我使用 graphql: ^5.0.0 和 json_annotation: ^4.0.1,Flutter 2.2.3

标签: fluttergraphqlflutter-dependenciesjson-serialization

解决方案


推荐阅读