Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 未处理的异常:将对象转换为可编码对象失败:';日期时间';_Flutter_Dart - Fatal编程技术网

Flutter 未处理的异常:将对象转换为可编码对象失败:';日期时间';

Flutter 未处理的异常:将对象转换为可编码对象失败:';日期时间';,flutter,dart,Flutter,Dart,我有一个Task=> 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(

我有一个Task=>

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,
      };
}
}


我试图使用.toString(),但出现以下错误=>类型“String”不是“index”的类型“int”的子类型

有没有办法在LocalStorage软件包上节省Datetime

更新:

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'],
                  ),
                ),
              );
            }
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'],
              //     ),
              //   ),
              // );
            }
使用toJson

“changeDate”:changeDate==null?null:changeDate.toIso8601String(),

和fromJson


changeDate:json[“changeDate”]==null?null:DateTime.parse(json[“changeDate”]),
我强烈建议您使用和描述API

可能看起来是这样的:

import'package:json_annotation/json_annotation.dart';
“任务g.省道”部分;
@JsonSerializable(null:false,explicitToJson:true)
课堂任务{
最后的字符串名;
布尔伊斯通;
最终日期时间;
int优先级值;
任务({this.isDone,this.name,this.time,this.priorityValue});
factory Task.fromJson(Map json)=>$TaskFromJson(json);
映射到JSON()=>$TaskToJson(此);
}
之后,您需要运行
build\u runner

flatter pub run build\u runner build

它将毫不费力地生成
toJson
fromJson
方法:

Task\u$TaskFromJson(映射json){
返回任务(
isDone:json['isDone']作为bool,
名称:json['name']作为字符串,
time:DateTime.parse(json['time']作为字符串),
priorityValue:json['priorityValue']作为int,
);
}
映射$TaskToJson(任务实例)=>{
“name”:instance.name,
'isDone':instance.isDone,
“时间”:instance.time.toIso8601String(),
“priorityValue”:instance.priorityValue,
};
您可以查看测试:

void main(){
test('应该从json解析任务',(){
常量json=''
[
{
“名称”:“测试”,
“isDone”:假,
“时间”:“2021-01-12T13:57:10.705476”,
“优先级值”:0
}
]
''';
最终列表decodedJson=jsonDecode(json);
最终列表List=decodedJson.map((e)=>Task.fromJson(e)).toList();
最终任务=list.first;
expect(task.name,“testing”);
expect(task.isDone,false);
expect(task.time、DateTime.parse(“2021-01-12T13:57:10.705476”);
expect(task.priorityValue,0);
});
}

我在from JSON DateTime.parse(jsonData['time'])和in to JSON m['time']=time.toIso8601String()中进行了操作;现在我得到这个错误类型'String'不是'DateTime'类型的子类型,我添加了一个morre代码var items=storage.getItem('tasks');if(items!=null){list.items=list.from((items as list).map((item)=>Task(name:item['name'],isDone:item['isDone'],time:DateTime.parse(item['time']),priorityValue:items['priorityValue'],),),;}现在获取类型“String”不是“index”的“int”类型的子类型“String”不是“DateTime”类型的子类型看起来像fromJson的问题,但是您的代码段看起来不错。也许您可以对您的问题进行代码更新。类型“String”不是“index”的“int”类型的子类型意味着您错误地将映射索引用于列表->因此
myVar['time']
而不是
myVar[1]
var items=storage.getItem('tasks');print($items”);I/flift(8537):[{name:testing,isDone:false,time:2021-01-12T13:57:10.705476,priorityValue:0}]类型字符串的时间变量,因此我添加了time:DateTime.parse(item['time']),类型“String”不是“index”的类型“int”的子类型。请检查您试图从JSON方法传递给
的内容,并检查类型
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'],
              //     ),
              //   ),
              // );
            }
"${selectedDate.toLocal()}".split(' ')[0]