【问题标题】:Flutter Dio return objectFlutter Dio 返回对象
【发布时间】:2021-03-01 09:32:12
【问题描述】:

我对 Flutter 有点陌生,来自 .NET 世界。

在 .NET 中,我有类似 httpclient.GetFromJsonAsync<User> 的东西来执行 GET 并将其反序列化为 User 对象。 在 Flutter 中,我使用 Dio 并看到它们具有相似的外观方法,get<T>。然而,即使我使用get<List<User>> 或get<User>,它总是抛出运行时错误,即它无法将List<dynamic> 转换为List<User> 或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 json-deserialization dio


    【解决方案1】:

    这样的库需要使用运行时反射,这在 Flutter 中是禁用的。运行时反射干扰了树抖动,Dart 已经支持了很长时间。使用摇树,您可以从发布版本中“摆脱”未使用的代码。这显着优化了应用的大小。

    由于反射使所有代码默认隐式使用,它使摇树变得困难。这些工具无法知道运行时哪些部分未使用,因此很难去除冗余代码。使用反射时无法轻松优化应用大小。

    虽然您不能在 Flutter 中使用运行时反射,但某些库为您提供了类似的易于使用的 API,但它们是基于代码生成的。代码生成库部分更详细地介绍了这种方法。

    https://flutter.dev/docs/development/data-and-backend/json

    很遗憾,您目前正在使用最准确的反序列化方式。

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 2021-09-29
      • 2021-04-20
      • 1970-01-01
      • 2020-07-25
      • 2020-08-17
      • 2020-05-15
      • 2021-02-04
      • 1970-01-01
      相关资源
      最近更新 更多