如何解决DART 如何将 DATETIME 映射到 SQFlite 数据库
概述:
应用架构详情:
具体问题详情:
DateTime date;
我知道 sqlite
不支持 DateTime(SQFlite
也不支持),the recommendation 将使用 String
或 Integer
。我正在为如何真正做到这一点而苦苦挣扎。
我遇到的错误:
颤动:***警告*** 类型为 DateTime 的无效参数 2021-07-01 15:09:11.129598。 仅支持 num、String 和 Uint8List。详情见https://github.com/tekartik/sqflite/blob/master/sqflite/doc/supported_types.md 这将在未来抛出异常。目前,每种类型只显示一次。
这是我的设置:
calendar_day.dart
class CalendarDay {
int? id;
DateTime date;
CalendarDay(
{this.id,required this.date});
// encode to sqlite database
Map<String,dynamic> toMap() {
final map = Map<String,dynamic>();
map['id'] = id;
map['date'] = date.toIso8601String(); //toString(); this toString did not work //jsonEncode(date) -> SERIALIZE THE ARRAYS INTO JSON strings,this did not work
return map;
}
// decode from sqlite database
static fromMap(Map map) {
return CalendarDay(
id: map['id'],date: DateTime.parse(map['date']),// jsonDecode(map['date']));
}
}
database_client.dart
class DatabaseClient {
Future<Database> initializedDatabase() async {
WidgetsFlutterBinding.ensureInitialized();
String path = await getDatabasesPath();
return openDatabase(
join(path,'three_things_database.db'),onCreate: (database,version) async {
await database.execute(
"CREATE TABLE ${Strings.calendarDayDataBase} (id INTEGER PRIMARY KEY,date TEXT)",); },version: 1,); }
// Create / insert calendarDay
Future<void> insertCalendarDay(CalendarDay day) async {
final Database database = await initializedDatabase();
await database.insert(
Strings.calendarDayDataBase,day.toMap(),conflictAlgorithm: ConflictAlgorithm.replace,);
}
}
我认为问题出在 toMap() 方法上,因为错误记录了 DateTime 对象。但我有点卡住了,真的不知道如何解决这个问题。非常感谢任何帮助。
我在 toMap() 中尝试的其他内容:
-
我尝试将 DateTime 对象映射到 JSONString。这有望足以将地图存储在 sqlite 数据库中,但这种方法会引发相同的错误。
-
尝试使用 date.toString() 映射到常规字符串。这也不起作用。由于 SQFlite 人员的建议(上面的链接)是使用 ISO8601 字符串,我认为这种方法会奏效。
相关问题,但没有解决我的问题:
解决方法
这是一个明显的例子:
var dt = DateTime.now();
// String
var dtStr = dt.toIso8601String();
dt = DateTime.tryParse(dtStr);
// Int
var dtInt = dt.millisecondsSinceEpoch;
dt = DateTime.fromMillisecondsSinceEpoch(dtInt);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。