我使用以下方法添加了一个列表元素:
listToAddTo.add(italianFood());
但是,当我尝试使用以下方法删除相同的元素时:
listToAddTo.remove(italianFood());
它不起作用。
我尝试使用带有参数item == italianFood()的removeWhere方法,带有项目!= italianFood()参数的keepWhere方法以及带有listToAddTo.indexOf(italianFood())参数的removeAt方法,但是,这些似乎都不起作用。
当我尝试打印列表时,得到以下结果:`
ListView(
scrollDirection: vertical,
primary: using primary controller,
scrollPhysics: AlwaysScrollableScrollPhysics,
shrinkWrap: shrink-wrapping
)
具有该结果的上述方法似乎也没有效果。
必要的代码如下:
List listToAddTo = [];
ListView italianFood() {
return ListView(
shrinkWrap: true,
children: <Widget>[
listEntry(
'Fast Food Nana',
'Mon - Sun 06:00 - 04:00',
Container(
child: IconButton(
icon: Icon(
Icons.motorcycle,
size: 30.0,
),
),
),
IconButton(
icon: Icon(
Icons.navigation,
size: 30.0,
),
),
),
],
);
Container filterItem(String label, value, onChanged) {
return Container(
decoration: BoxDecoration(color: Colors.white),
child: CheckboxListTile(
value: value,
title: Text(label),
onChanged: onChanged,
),
);
bool isTrue = false;
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
Container(
margin: const EdgeInsets.only(top: 45.0),
child: ListView.builder(
itemCount: listToAddTo.length,
itemBuilder: (BuildContext context, int Index) {
return (listToAddTo[Index]);
},
),
),
ExpansionTile(
title: Text('Filters'),
children: <Widget>[
filterItem(
'Italian',
isTrue,
(bool value) {
setState(() {
if (isTrue == false) {
listToAddTo.add(italianFood());
isTrue = !isTrue;
} else {
listToAddTo.removeAt(listToAddTo.indexOf(italianFood()));
isTrue = !isTrue;
}
});
print(listToAddTo);
print(italianFood());
},
),
],
),
],
);
答案 0 :(得分:2)
您不能删除它,因为它们是不同的对象。
每次使用italianFood()
时,都会创建一个class
的新实例。
创建一个全局变量:
ListView _myItalianFood;
实例化:
在您的添加方法中:
_myItalianFood = italianFood();
listToAddTo.add(_myItalianFood);
删除:
listToAddTo.remove(_myItalianFood);
答案 1 :(得分:2)
问题是italianFood()
在每次调用时都会返回一个新的ListView
实例。因此,当您调用listToAddTo.add(italianFood())
时,您正在创建一个新的ListView
实例(我们将其命名为LV1
),最后您将listToAddTo
称为[LV1]
。
调用listToAddTo.remove(italianFood())
时,您将创建一个新的ListView
实例(我们将其命名为LV2
),并要求listToAddTo
删除等于{{1} },因此最终无济于事,因为LV2
不在LV2
中。
您可以通过将listToAddTo
设置为字段来解决此问题。
italianFood