flutter - 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
解决方案
推荐阅读
- matlab - 我应该如何在网站中指定一个标签以使用 webread() 阅读?
- sql - INNER JOIN 与两个具有相同字段的相同表
- wpf - WPF 图像周围奇怪的黑色背景
- reactjs - Reactjs:如何在单击按钮时一次显示一个切换的内容
- javascript - 期望一个字符串(用于内置组件)或一个类/函数(用于复合组件)但得到:对象
- javascript - 当“循环”为真时,无法通过其标签切换复选框
- django - TypeError:__init__() 为 reportlab django 获得了一个意外的关键字参数“as_attachment”
- javascript - readable.destroy() 不会同时发出“关闭”和“错误”事件 Node.js
- sql-server - MSSQL将名称解析为两个新列并添加到同一个表中
- json - 如何解析 .jsx 文件中的外部 JSON 文件