我有一个任务模型=>
class Task {
Task({this.isDone,this.name,this.time,this.priorityValue});
final String name;
bool isDone;
final DateTime time;
int priorityValue;
factory Task.fromJson(Map<String, dynamic> jsonData) {
return Task(
name: jsonData['name'],
isDone: false,
time: jsonData['time'],
priorityValue: jsonData['priorityValue'],
);
}
toJSONEncodable() {
Map<String, dynamic> m = new Map();
m['name'] = name;
m['isDone'] = isDone;
m['time'] = time;
m['priorityValue'] = priorityValue;
return m;
}
static Map<String, dynamic> toMap(Task task) => {
'name': task.name,
'isDone': task.isDone,
'time': task.time,
'priorityValue': task.priorityValue,
};
}
Run Code Online (Sandbox Code Playgroud)
当使用 localStorage 包保存一些对象列表时,我收到此错误=>
(颤动)未处理的异常:将对象转换为可编码对象失败:“DateTime”实例
_saveToStorage() {
storage.setItem('tasks', list.toJSONEncodable());
print("Saved");
Run Code Online (Sandbox Code Playgroud)
}
我尝试使用 .toString() 但后来出现此错误 => 类型“String”不是“index”的“int”类型的子类型
有什么想法可以将日期时间保存在 LocalStorage 包上吗?
更新:
factory Task.fromJson(Map<String, dynamic> jsonData) {
return Task(
name: jsonData['name'],
isDone: false,
time: jsonData["time"] == null ? null : DateTime.parse(jsonData["time"]),
priorityValue: jsonData['priorityValue'],
);
}
toJSONEncodable() {
Map<String, dynamic> m = new Map();
m['name'] = name;
m['isDone'] = isDone;
m['time'] = time == null ? null : time.toIso8601String();
m['priorityValue'] = priorityValue;
return m;
}
static Map<String, dynamic> toMap(Task task) => {
'name': task.name,
'isDone': task.isDone,
'time': task.time,
'priorityValue': task.priorityValue,
};
var items = storage.getItem('tasks');
if (items != null) {
list.items = List<Task>.from(
(items as List).map(
(item) => Task(
name: item['name'],
isDone: item['isDone'],
time: DateTime.parse(item['time']),
priorityValue: items['priorityValue'],
),
),
);
}
Run Code Online (Sandbox Code Playgroud)
更新后,我收到此错误“‘String’类型不是‘index’的‘int’类型的子类型”
更新2:
var items = storage.getItem('tasks');
if (items != null) {
final decodedJson = jsonDecode(items);
list.items = (decodedJson as List)
.map((e) => Task.fromJson(e))
.toList();
final task = list.items.first;
print("${task.name}");
// list.items = List<Task>.from(
// (items as List).map(
// (item) => Task(
// name: item['name'],
// isDone: item['isDone'],
// time: DateTime.parse(item['time']),
// priorityValue: items['priorityValue'],
// ),
// ),
// );
}
Run Code Online (Sandbox Code Playgroud)
第二次更新后,我得到“类型'_InternalLinkedHashMap <String,dynamic>'不是类型'String'的子类型”
固定的
我将模型中的日期时间更改为字符串,并在获取时将时间转换为字符串
"${selectedDate.toLocal()}".split(' ')[0]
Run Code Online (Sandbox Code Playgroud)
w46*_*461 17
使用toJson
"changeDate": changeDate == null ? null : changeDate.toIso8601String(),
和来自Json
changeDate: json["changeDate"] == null ? null : DateTime.parse(json["changeDate"]),
归档时间: |
|
查看次数: |
18279 次 |
最近记录: |