【问题标题】:Flutter: DateTime as argument in retrofit method; DateTime ISO 8061 serialization; Retrofit date iso8061 formattingFlutter: DateTime 作为改造方法中的参数; DateTime ISO 8061 序列化;改造日期 iso8061 格式
【发布时间】: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)。

我该怎么做?

【问题讨论】:

    标签: rest flutter datetime retrofit 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() 方法,我们正在用扩展方法证明。就是这样。

    【讨论】:

    • 应该选择这个答案。
    猜你喜欢
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多