Flutter HiveDB 从数据库中删除

Posted

技术标签:

【中文标题】Flutter HiveDB 从数据库中删除【英文标题】:Flutter HiveDB deleting from database 【发布时间】:2021-11-22 13:27:09 【问题描述】:

Hive 的文档中,我们有delete 用于从数据库中删除某些内容的方法,但此方法不会从数据库中删除,它只对找到的数据索引执行null,当我们想要时它会导致一些问题监听数据库更改或使用null 数据制作ListView

另一个问题是.values 返回non-nullable 数据,当我们尝试创建ListView 时,我们得到null 错误

late Box<Sal> _sal;
useEffect(()
  _sal = Hive.box<Sal>('sal') ;
);

// ...
ValueListenableBuilder(
  valueListenable: _sal.listenable(),
  builder: (_, Box<Sal> sal, __) => ListView.builder(
    physics: const NeverScrollableScrollPhysics(),
    shrinkWrap: true,
    padding: EdgeInsets.zero,
    itemBuilder: (context, index) 
      return Container(
        height: 50.0,
        margin: EdgeInsets.symmetric(vertical: 0.0),
        child: Card(
          color: DefaultColors.$lightBrown,
          child: Row(
            children: [
              CText(
                text: _sal.get(index)!.salName,
                color: Colors.white,
                style: AppTheme.of(context).thinCaption(),
              ).pOnly(right: 16.0),
              const Spacer(),
              IconButton(
                icon: Icon(
                  Icons.edit,
                  color: Colors.yellow,
                ),
                onPressed: () => showGeneralDialog(
                  //...
                ),
              ),
              IconButton(
                icon: Icon(
                  Icons.delete,
                  color: Colors.white,
                ),
                onPressed: () => showGeneralDialog(
                  //...
                ),
              ),
            ],
          ),
        ),
      );
    ,
    itemCount: _sal.values.length,
  ),
).pSymmetric(
  h: 16,
),

//...

【问题讨论】:

【参考方案1】:

我找到了解决这个问题的方法

late Box<Sal> _sal;
late List<Sal> _data;
useEffect(() 
  _sal = Hive.box<Sal>('sal');
  _data = _sal.values.toList();
);

//...

ValueListenableBuilder(
  valueListenable: Hive.box<Sal>('sal').listenable(),
  builder: (_, Box<Sal> sal, __) 
    _data = _sal.values.toList();
    return ListView.builder(
    physics: const NeverScrollableScrollPhysics(),
    shrinkWrap: true,
    padding: EdgeInsets.zero,
    itemBuilder: (context, index) 
      return Container(
        height: 50.0,
        margin: EdgeInsets.symmetric(vertical: 0.0),
      );
    ,
    itemCount: _data.length,
  );
  ,
),
//...

【讨论】:

以上是关于Flutter HiveDB 从数据库中删除的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:如何从 Firebase 数据库中删除最后一个节点?

Flutter:Firebase Realtime 从对象列表中删除对象

Flutter - 从特定值中删除数据,Firebase 实时数据库 [重复]

Dart // Flutter:如何根据条目的内容从列表中删除项目

在 Flutter 列表视图中删除 Firestore 数据

从 Flutter 的列表中删除项目