Flutter Hive:deleteAt将值设为null,而不是将其删除

时间:2020-07-13 18:34:17

标签: flutter dart flutter-dependencies

所以说我有一个书清单。 实际上,使用deleteAt删除第n个索引的书并不是删除它,而是将第(n + 1)个元素移到它的位置,而是使它成为null。即第n个元素现在为null

如何完美执行deleteAt

顺便说一句,我在ValueListenableBuilder之外使用了删除。

ValueListenableBuilder(
                    valueListenable: Hive.box('books').listenable(),
                    builder: (context, box, _) {
                      if (box.values.length == 0)
                        return Center(
                          child: Text("No books"),
                        );
                      return ListView.builder(
                        primary: true,
                        padding: EdgeInsets.only(bottom: 95),
                        itemCount: box.values.length,
                        itemBuilder: (context, int index) {
                          Book book = box.get(index);
                          return Padding(
                            padding:
                                const EdgeInsets.only(bottom: kMasterPadding),
                            child: BookItem(
                              title: book.title,
                              author: book.authorName,
                            ),
                          );
                        },
                      );
                    },
                  ),

删除代码

() async {
      await Hive.box("books").deleteAt(Hive.box("books").length - 2);
//deleted at last 2nd coz deleting at the end was working perfectly
           },

2 个答案:

答案 0 :(得分:0)

您可以通过在列表上运行List<E>.removeAt(index) remove an element。这也会使最后一个元素向左移动一个索引。

答案 1 :(得分:0)

您可以尝试使用Book book = box.getAt(index);代替Book book = box.get(index); https://github.com/hivedb/hive/issues/376