我有一个带有小部件的ListView.builder,我想从中删除项目,但当我执行下面的行时,什么都不会发生。
if (mounted) {
setState(() {
verlustContentList.removeLast();
});
}
这就是我生成列表的方式:
generateList() async {
return verlustContentList = List.generate(
15,
(index) => VerlustContent(
key: Key(
index.toString(),
),
),
);
}
这就是我显示列表的方式:
StreamBuilder(
stream: generateList().asStream(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
return ListView.builder(
itemCount: verlustContentList.length,
itemBuilder: (context, index) {
return verlustContentList[index];
},
);
},
);
类VerlustContent是一个Statefulwidget。
StreamBuilder侦听您定义的流,但您从未将新数据推送到该流。
如果你想在.removeLast((之后打印列表,那么它实际上会打印没有最后一个的列表。
我认为您应该删除StreamBuilder,因为您甚至无法通过这种方式访问该流。在initState((上生成列表,并将其显示在ListView中。若生成确实需要一些时间,若列表为空,则可以返回CircularProgressIndicator((。
class MyStateful extends StatefulWidget {
@override
_MyStatefulState createState() => _MyStatefulState();
}
class _MyStatefulState extends State<MyStateful> {
List<Text> list= [];
@override
void initState() {
super.initState();
generateList();
}
void generateList() {
list = List.generate(
15,
(index) => Text(
index.toString()
),
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Column(
children: [
Container(
height: 300,
child: ListView.builder(
itemCount: list.length,
itemBuilder: (context, index) {
return list[index];
},
),
),
ElevatedButton(
onPressed: () {
if (mounted) {
setState(() {
list.removeLast();
print(list);
});
}
},
child: Text('deleteLast'),
),
],
),
),
),
);
}
}