Flutter: DateTime 作为改造方法中的参数; DateTime ISO 8061 序列化;改造日期 iso8061 格式
Posted
技术标签:
【中文标题】Flutter: DateTime 作为改造方法中的参数; DateTime ISO 8061 序列化;改造日期 iso8061 格式【英文标题】:Flutter: DateTime as argument in retrofit method; DateTime ISO 8061 serialization; Retrofit date iso8061 formatting 【发布时间】:2021-05-29 15:29:54 【问题描述】:我想定义一个方法如下:
@GET("/users")
@Headers(<String, dynamic>"Accept": "application/json", "Authorization": "Basic " + authKey)
Future<List<User>> getUsers(@Query("fromDate") DateTime from, @Query("toDate") DateTime to);
这样DateTime
参数被序列化为 ISO8061 格式,输出查询如下所示:
[GET]https://address.com/users?fromDate=2021-02-21T12:00:00.000Z&toDate=2021-02-27T12:00:00.000Z
我已经在使用 Flutter retrofit lib(内部使用 Flutter dio)。
我该怎么做?
【问题讨论】:
【参考方案1】:只需使用如下扩展方法即可。 Flutter 内置了 8061 DateTime 序列化!
extension Iso8061SerializableDateTime on DateTime
String toJson() => this.toIso8601String();
洞察力:
Retrofit 在 *.g.dart 文件中生成如下方法:
@override
Future<List<User>> getUsers(from, to) async
final queryParameters = <String, dynamic>
r'fromDate': from?.toJson(),
r'toDate': to?.toJson()
;
final _data = <String, dynamic>;
final _result = await _dio.request<List<dynamic>>('/orders',
queryParameters: queryParameters,
options: RequestOptions( ... )
)
需要.toJson()
方法,我们正在用扩展方法证明。就是这样。
【讨论】:
应该选择这个答案。以上是关于Flutter: DateTime 作为改造方法中的参数; DateTime ISO 8061 序列化;改造日期 iso8061 格式的主要内容,如果未能解决你的问题,请参考以下文章
为了弄懂Flutter的状态管理, 我用10种方法改造了counter app
Flutter:Firebase FieldValue.serverTimestamp() 到 DateTime 对象