Flutter:使用泛型进行 http 响应

Posted

技术标签:

【中文标题】Flutter:使用泛型进行 http 响应【英文标题】:Flutter : Use generics for http response 【发布时间】:2019-09-30 09:39:27 【问题描述】:

我是 Flutter 的新手。 我从 Kotlin 的 android 开发迁移到 Flutter。 我想得到 Http Url 的回复。 服务器的所有响应都是一种格式,并且 2 个变量的类型是通用的。 我是在 Kotlin 中通过这 2 个类完成的。

class BaseResponse<T> 

@SerializedName("IsSuccess")
var isSuccess: Boolean = false

@SerializedName("Item")
var item: T? = null

@SerializedName("ListItems")
var listItems: List<T>? = null

@SerializedName("ErrorCode")
var errorCode: Int? = null

其他类和响应是这样的:

data class TablesModel(var id: Long, var tableType: String, var tableCost: Int, var banner: String?, var onLineCount: Int)

我的回答是这样的:

BaseResponse<TablesModel> 

现在我想在 Flutter 中做这件事。请帮帮我。

【问题讨论】:

【参考方案1】:

对于 Dart 中的通用 json 模型,使用 ValueObjects/Mojos 是很常见的。 您可以使用 json_serializer 和构建器自己准备模型类。或者类似的工具 https://app.quicktype.io/ 将从您的 json 响应中生成模型。

关于泛型,正确的方法是拥有一个抽象模型类并在子类中实现不同的响应类型,或者您可以利用类型系统传递参数,以便编译器知道如何处理这些属性。

最简单的方法是使用类型 dynamic 或 Object,如 jsonDecode dot,但您会丢失编译时错误的类型检查和 IDE 的自动完成提示。

【讨论】:

以上是关于Flutter:使用泛型进行 http 响应的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 安装配置和初步使用记录

如何使用 Flutter 与 ERC721 智能合约交互?

Flutter进行HTTP请求并保存登陆状态(dio)

Flutter进行HTTP请求并保存登陆状态(dio)

Flutter进行HTTP请求并保存登陆状态(dio)

如何在 Flutter 中解码 Gzip Http 响应?