You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter插件向Android原生传递DateTime参数遇Invalid argument错误求解决

问题原因

Flutter Method Channel跨平台通信仅支持传递基础数据类型(int、double、String、bool、List、Map及它们的嵌套组合),Dart的DateTime是自定义对象,没有默认的跨平台序列化逻辑,直接传递会触发类型不匹配错误,导致你看到的Invalid argument: Instance of 'DateTime'异常。

解决方法

以下两种是最常用的DateTime跨平台传递方案:

方案1:传递时间戳(推荐,性能高)

将Dart的DateTime转换为毫秒级时间戳,原生端接收后再转为Date对象。

Dart代码修改

Future<bool?> getDate(DateTime localTime) async {
  return _dateChannel.invokeMethod<bool>('my_method_channel',
      {'localTime': localTime.millisecondsSinceEpoch});
}

Java代码修改

if (methodCall.method.equals("my_method_channel")) {
    long timestamp = methodCall.argument("localTime");
    Date localTime = new Date(timestamp);

    System.out.println(
            "TEST |  Estimated localTime | " + localTime);

    result.success(true);
}

方案2:传递ISO8601格式字符串(可读性强)

将DateTime转为标准ISO8601字符串,原生端解析字符串得到时间对象。

Dart代码修改

Future<bool?> getDate(DateTime localTime) async {
  return _dateChannel.invokeMethod<bool>('my_method_channel',
      {'localTime': localTime.toIso8601String()});
}

Java代码修改(兼容Android 8.0+)

if (methodCall.method.equals("my_method_channel")) {
    String dateStr = methodCall.argument("localTime");
    LocalDateTime localDateTime = LocalDateTime.parse(dateStr, DateTimeFormatter.ISO_DATE_TIME);
    // 如需转为java.util.Date类型
    Date localTime = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

    System.out.println(
            "TEST |  Estimated localTime | " + localTime);

    result.success(true);
}

兼容旧版本Android(低于8.0)

if (methodCall.method.equals("my_method_channel")) {
    String dateStr = methodCall.argument("localTime");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    Date localTime = sdf.parse(dateStr);

    System.out.println(
            "TEST |  Estimated localTime | " + localTime);

    result.success(true);
}

内容的提问来源于stack exchange,提问作者bellotas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:20:21