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

Flutter API插入数据时DateTime序列化引发JsonUnsupportedObjectError的解决方案咨询

Flutter API插入数据时DateTime序列化引发JsonUnsupportedObjectError的解决方案咨询

嘿,我刚看到你的问题,这个报错其实很常见——Dart自带的jsonEncode方法没办法直接序列化DateTime对象,因为它只支持基本数据类型(字符串、数字、布尔值)和标准集合类型(列表、Map)。别着急,我给你几个简单的解决办法:

方法一:转成ISO8601标准字符串(最推荐)

绝大多数后端API都支持ISO8601格式的日期字符串,你只需要把DateTime.now()换成DateTime.now().toIso8601String()就行,这是Dart DateTime自带的方法,不用额外依赖。

修改后的myinsert Map:

var myinsert={
  "ID":sayac,
  "MAS_ID":1,
  "PALET_NO":e.PALETNO,
  "TARIH":DateTime.now().toIso8601String(), // 这里是修改的核心部分
  "HUCRE_KODU":e.HUCREKODU,
  "MIKTAR":e.MIKTAR,
  "HAREKET_TIPI":"PALET TOPLAMA"
};

方法二:自定义日期格式(适配后端特定要求)

如果你的后端需要非标准格式的日期(比如yyyy-MM-dd HH:mm:ss这种常用格式),可以用intl包来格式化:

  1. 先在pubspec.yaml里添加依赖:
dependencies:
  flutter:
    sdk: flutter
  intl: ^0.18.1 # 可以替换成最新版本
  1. 在代码里导入包:
import 'package:intl/intl.dart';
  1. 按照需求格式化日期:
var myinsert={
  "ID":sayac,
  "MAS_ID":1,
  "PALET_NO":e.PALETNO,
  "TARIH":DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now()), // 自定义格式
  "HUCRE_KODU":e.HUCREKODU,
  "MIKTAR":e.MIKTAR,
  "HAREKET_TIPI":"PALET TOPLAMA"
};

修改后的完整请求代码

var myinsert={
  "ID":sayac,
  "MAS_ID":1,
  "PALET_NO":e.PALETNO,
  "TARIH":DateTime.now().toIso8601String(),
  "HUCRE_KODU":e.HUCREKODU,
  "MIKTAR":e.MIKTAR,
  "HAREKET_TIPI":"PALET TOPLAMA"
};

String uri = 'http://192.168.0.21/api/values/DegerEkle/';
Uri ur = Uri.parse(uri);

try {
  final response = await http.post(ur, 
    headers: {'Content-Type': 'application/json'},
    body: jsonEncode(myinsert)
  ).timeout(const Duration(seconds: 30));
  print(response);
} catch(e) {
  print("请求出错:$e"); // 加个异常捕获,方便排查其他潜在问题
}

小提醒:记得提前确认后端接口期望的日期格式,要是格式不匹配可能还是会出现接口报错哦~

备注:内容来源于stack exchange,提问作者Ahmet Enes Söylemez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:17:32