Flutter Hive: deleteAt делает значение нулевым вместо его удаления - PullRequest
0 голосов
/ 13 июля 2020

Допустим, у меня есть список книг. Удаление книги по n-му индексу с использованием deleteAt на самом деле не приводит к ее удалению и перемещению (n + 1) -го элемента на его место, а делает его null. т.е. элемент в nth теперь равен 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 голосов
/ 20 июля 2020

Вы можете попробовать Book book = box.getAt(index); вместо Book book = box.get(index); https://github.com/hivedb/hive/issues/376

0 голосов
/ 13 июля 2020

Вы можете удалить элемент из List<E>, запустив .removeAt(index) в своем списке. Это также сдвинет ваши последние элементы на один индекс влево.

...