You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何清空Moor数据库?登出调用deleteEntry报空指针异常求助

解决NoSuchMethodError: 方法'deleteEntry'被调用在null上的问题

你遇到的这个异常核心原因很明确:你声明了CategoryBloc _categoryBloc;,但从来没有给这个变量赋值过实例,所以当你调用_categoryBloc.deleteEntry()时,实际上是在对一个null对象调用方法,自然会抛出这个错误。

下面是具体的解决步骤:

1. 初始化你的CategoryBloc实例

根据你使用的Widget类型,选择合适的时机初始化Bloc:

  • 如果是在StatefulWidget的State类中,推荐在initState方法里初始化:
    @override
    void initState() {
      super.initState();
      // 这里初始化Bloc,如果你的Bloc构造函数需要依赖(比如CategoryRepository),记得传入
      _categoryBloc = CategoryBloc();
      // 假设你的Bloc需要传入仓库实例:
      // _categoryBloc = CategoryBloc(CategoryRepository());
    }
    
  • 如果是使用依赖注入框架(比如get_it、provider),要确保在调用方法前已经完成Bloc的注册和实例获取。

2. (可选但推荐)添加资源释放逻辑

Bloc通常会持有数据库连接、流等资源,为了避免内存泄漏,在页面销毁时记得释放:

@override
void dispose() {
  // 如果你的CategoryBloc有dispose方法(比如关闭流),记得调用
  _categoryBloc.dispose();
  super.dispose();
}

额外检查点

顺便帮你排查下DAO层的代码:
你目前的DAO删除方法写的是:

Future deleteEntry() {
  return delete(categories).delete(Categorie());
}

这种写法是删除匹配传入的Categorie实例的条目,但你传入的是一个空的Categorie(),大概率不会匹配到任何数据。如果你的需求是清空整个分类表,应该使用Moor的deleteAll方法:

Future deleteAllEntries() {
  return deleteAll(categories);
}

记得同步更新仓库和Bloc里的对应方法。

内容的提问来源于stack exchange,提问作者BIS Tech

火山引擎 最新活动