【问题标题】:已关闭的 Dismissible 小部件仍然是树的一部分。扑通扑通
【发布时间】:2022-01-23 05:24:21
【问题描述】:

我有一个使用 firebase 作为我的数据库的应用程序,我在屏幕上遇到了这个问题

我正在添加 Dismissible 小部件以删除项目。当我查看时,它可以在数据库上正常工作,但不能在应用程序本身上工作。

这是我的解雇:

return Dismissible(
                    key: Key(todos[index].title),
                    background: Container(padding:EdgeInsets.only(left: 20),alignment: Alignment.centerLeft,
                        child:Icon(Icons.delete),
                      color:Colors.red,
                    ),
                    onDismissed: (direction) async{
                      await DatabaseService().removeTodo(todos[index].uid);

                    },
                    child: ListTile(
                      onTap: (){
                        DatabaseService().completTask(todos[index].uid);

                      },
                      leading: Container(
                        padding: EdgeInsets.all(2),
                        height: 30,
                        width: 30,
                        decoration: BoxDecoration(
                          color: Colors.blue,
                          shape: BoxShape.circle
                        ),
                        child: todos[index].isComplet? Icon(Icons.check,color: Colors.white):Container(

                        ),
                      ),
                      title: Text(
                        todos[index].title,
                      )
                    ),

这是我的数据库服务:

class DatabaseService{
  CollectionReference todosCollection = FirebaseFirestore.instance.collection("Todos");
  Future createNewTodo(String title) async{
    return await todosCollection.add({
      "title":title,
      "isComplet":false,
    });
  }
  Future completTask(uid)async{
    await todosCollection.doc(uid).update({"isComplet":true});
  }

  Future removeTodo(uid) async{
    await todosCollection.doc(uid).delete();
  }

  List<Todo> todoFromFirestore(QuerySnapshot snapshot){
    return snapshot.docs.map((e) {
      return Todo(uid: e.id,
        title: (e["title"]),
        isComplet: e["isComplet"],);
    }).toList();
  }
  Stream<List<Todo>> listTodos() {
    return todosCollection.snapshots().map(todoFromFirestore);
  }
}

如果有人可以帮助我,我将非常感激我不知道为什么会出现此错误。

【问题讨论】:

    标签: android database firebase flutter


    【解决方案1】:

    问题肯定是索引,所以我改了:

    key: Key(todos[index].title),
    

    为:

    key: UniqueKey(),
    

    并且它工作正常,问题来自列表中已删除的项目,小部件无法识别它。

    【讨论】:

      猜你喜欢
      • 2020-12-19
      • 1970-01-01
      • 2021-11-30
      • 2020-02-16
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 2021-08-08
      相关资源
      最近更新 更多