flutter - Flutter Dio 返回对象
问题描述
我对 Flutter 有点陌生,并且来自 .NET 世界。
在 .NET 中,我有类似httpclient.GetFromJsonAsync<User>
执行 GET 并将其反序列化为User
对象的操作。在 Flutter 中,我使用 Dio 并看到它们具有相似的外观方法,get<T>
. 然而,即使我使用get<List<User>>
or get<User>
,它总是抛出运行时错误,它无法转换List<dynamic>
为List<User>
or Map
,User
尽管代码已成功编译。
final List<User> response = await Dio().get<List<User>>('urlThatReturnListOfUser');
有没有更好的方法或包来反序列化动态/映射到对象?
到目前为止我发现的最好的方法是使用 Json_Serializable,但即便如此,我仍然必须编写类似的东西
final List<User> weathers = (response.data as List)
.map((e) => User.fromJson(e as Map<String, dynamic>))
.toList();
每次我调用 API。或者这是我目前最好的选择?还是我用错了Dio?
解决方案
这样的库需要使用运行时反射,这在 Flutter 中是禁用的。运行时反射会干扰树抖动,Dart 已经支持了很长时间。通过摇树,您可以从发布版本中“摆脱”未使用的代码。这显着优化了应用程序的大小。
由于反射使默认情况下隐式使用所有代码,因此它使摇树变得困难。这些工具无法知道运行时哪些部分未使用,因此很难去除冗余代码。使用反射时无法轻松优化应用程序大小。
尽管您不能在 Flutter 中使用运行时反射,但某些库为您提供了类似的易于使用的 API,但它们是基于代码生成的。此方法在代码生成库部分中有更详细的介绍。
https://flutter.dev/docs/development/data-and-backend/json
不幸的是,您目前正在使用最准确的反序列化方式。
推荐阅读
- android - 如果文本太长而无法容纳,则切换到替代的较短文本
- javascript - XML 解析错误:在 ASP.NET Core 5.0 Ajax 中找不到根元素
- php - 如何从刀片模板调用本地 css 文件?
- undefined - 我可以强制 LibreOffice basic 报告未定义变量的错误吗?
- c# - 克隆不使用动画/启用/禁用功能?
- java - 如何有效阻止更改所有活动字段?
- powershell - powershell 点击 Internet Explorer 弹出窗口
- javascript - 在为函数中的参数赋值时,我们可以使用括号而不是等号吗?
- docker - 无法初始化 docker swarm
- python - 熊猫合并数据帧不同的行数重复数据