颤动不允许从树上移除

时间:2018-01-28 19:41:32

标签: android listview flutter

我正在与Flutter合作,我正在努力从树中删除一个Dismissible对象。以下是我的代码。我创建了一个存储在列表'newlist'中的自定义类。我似乎从List和setState()中删除了Dismissible对象,但它似乎不起作用。非常感谢任何帮助。

   return new Dismissible(key: new Key("newlist"),
direction: DismissDirection.horizontal,
onDismissed: (DismissDirection direction) {
            setState(() {
              newlist.remove(newlist[index]);
              print(newlist.length);

            });
},
child: new ListTile(
leading: const
Icon(Icons.album),
title: new Text(newlist[index].amount),
subtitle: new Text(
newlist[index].name)));
})),

3 个答案:

答案 0 :(得分:2)

我已经解决了它,使用项目名称+列出长度作为关键字。因为可能会有一些具有相同值的项目

return Dismissible(

          key: Key(item.name + _paths.length.toString()),

          onDismissed: (direction) {
            setState(() {
              _paths.removeAt(index);
            });

          // Show a red background as the item is swiped away
          background: Container(color: Colors.red),
          child: Container(child: new Texts().tallText(item.name)),
        );

答案 1 :(得分:1)

我解决了。基本上,我为每个Dismissable使用相同的Key。这让Flutter认为我解雇的对象仍然存在。希望这有助于某人。

答案 2 :(得分:1)

是的,这仅是由于密钥。

String grp_id; DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child(users).child(uid); // user 1 uid reference.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot d : dataSnapshot.getChildren()) { grp_id = d.child("grp_id).getValue(); fetchLocation(grp_id); // Here i came to know the group of user 1 } } @Override public void onCancelled(DatabaseError databaseError) { } }); -错误

应该是:

void fetchLocation(String grp_id) {

    DatabaseReference db = FirebaseDatabase.getInstance().getReference();

    Query query = db.child("locations").orderByChild("grp_id").equalTo(grp_id);
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

    // Here you get the locations of users of group  
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});