1

我正在尝试将数据添加到我的蜂巢箱。我已经初始化了配置单元,打开了盒子,然后将数据添加到了盒子中。但是,我收到一个错误,询问 TimeOfDay 是一个未知时间,尽管我已经注册/构建了一个时间适配器。我在下面附上了我的部分代码,有人可以解决这个问题吗?

task_model.g.dart

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'task_model.dart';

// **************************************************************************
// TypeAdapterGenerator
// **************************************************************************

class TasksModelAdapter extends TypeAdapter<TasksModel> {
  @override
  final int typeId = 0;

  @override
  TasksModel read(BinaryReader reader) {
    final numOfFields = reader.readByte();
    final fields = <int, dynamic>{
      for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
    };
    return TasksModel(
      taskDetails: fields[0] as String,
      isChecked: fields[1] as bool,
      priority: fields[2] as String,
      time: fields[3] as TimeOfDay,
      date: fields[4] as DateTime,
    );
  }

  @override
  void write(BinaryWriter writer, TasksModel obj) {
    writer
      ..writeByte(5)
      ..writeByte(0)
      ..write(obj.taskDetails)
      ..writeByte(1)
      ..write(obj.isChecked)
      ..writeByte(2)
      ..write(obj.priority)
      ..writeByte(3)
      ..write(obj.time)
      ..writeByte(4)
      ..write(obj.date);
  }

  @override
  int get hashCode => typeId.hashCode;

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is TasksModelAdapter &&
          runtimeType == other.runtimeType &&
          typeId == other.typeId;
}

task_model.dart

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';

part 'task_model.g.dart';

@HiveType(typeId: 0)
class TasksModel{
  @HiveField(0)
  String taskDetails;

  @HiveField(1)
  bool isChecked = false;

  @HiveField(2)
  String priority;

  @HiveField(3)
  TimeOfDay time;

  @HiveField(4)
  DateTime date;

  TasksModel({@required this.taskDetails, @required this.isChecked, @required this.priority, @required this.time, @required this.date});

  void toggle(){
    isChecked = !isChecked;
  }
}

创建新任务

void addNewTask(TasksModel data){
    final taskBox = Hive.box('todoTasks');
    taskBox.add(data);
  }

final newTask = TasksModel(taskDetails: taskName, isChecked: false, priority: priorityVal, time: _time, date: _date);
addNewTask(newTask);
4

2 回答 2

1

您还需要为TimeOfDay类生成适配器然后注册它

于 2021-08-23T07:51:32.983 回答
0

由于TimeOfDay 不是 dart 提供的隐式数据类型,因此引发错误。要解决此问题,类似于 TasksModel 类定义,应该有一个 TimeOfDay 类的定义来定义它的蓝图,并包含配置单元类型以及 TimeOfDay 类的每个属性的配置单元字段。最后在使用与 TasksModelAdapter 相同的配置单元生成器后注册TimeOfDayAdapter

于 2021-09-04T07:11:19.187 回答