flutter 为什么它在这里抛出一个未处理的异常?

46qrfjad  于 2022-12-24  发布在  Flutter
关注(0)|答案(1)|浏览(147)

我尝试用hive持久化我的日历数据,但是当我启动程序时,它抛出了以下代码:
[错误:flutter/运行时/dart_vm_initializer. cc(41)]未处理的异常:类型"Null"不是类型转换中类型"bool"的子类型
这是我的模型类:

@HiveType(typeId: 1)
class Event extends HiveObject {
  @HiveField(0)
  late String title;

  @HiveField(1)
  late DateTime eventDateTime;

  @HiveField(2)
  bool wholeDayEvent;

  Event({
    required this.title,
    required this.eventDateTime,
    required this.wholeDayEvent,
  });

  @override
  String toString() => title;
}

下面是我的显示小部件的构建方法:

Expanded(
              child: ValueListenableBuilder<Box<Event>>(
                valueListenable: Boxes.getEvents().listenable(),
                builder: (context, box, _) {
                  final events = box.values.toList().cast<Event>();
                  return ListView.builder(
                    itemCount: events.length,
                    itemBuilder: (context, index) {
                      return Container(
                        margin: const EdgeInsets.symmetric(
                          horizontal: 12.0,
                          vertical: 4.0,
                        ),
                        decoration: BoxDecoration(
                          border: Border.all(),
                          borderRadius: BorderRadius.circular(12.0),
                        ),
                        child: ListTile(
                          onTap: () => print('${box.values}'),
                          title: Text('${box.values}'),
                        ),
                      );
                    },
                  );
                },
              ),
            ),
2ledvvac

2ledvvac1#

我可以假设您更改了Event对象中的一些字段,而Hive数据库不为空,因此以前存储的对象没有这些新字段,因此它们的值为null,这会引发错误。
你可以通过在使用Hive之前清除它来解决这个问题,这样它就可以删除以前的数据对象,并在main()中使用新的数据对象:

await Hive.openBox<Event>("yourBoxName"); // opens the box
await Hive.box<Event>("yourBoxName").clear(); // clear the box

现在,您将拥有一个空框,并且您的代码将再次正常工作。
你应该只清除它一次,以删除以前的数据,之后你可以删除clear()行和正常工作。

相关问题