Flutter ListView 删除项目不起作用

Flutter ListView delete Items not working

我有一个 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];
                        
                      },
                    );
                  },
                );

Class VerlustContent 是一个有状态的小部件。

StreamBuilder 侦听您定义的流,但您永远不会向该流推送 新数据。

如果您要在 .removeLast() 之后打印列表,它实际上会打印没有最后一个的列表。

我认为您应该删除 StreamBuilder,因为您甚至无法通过这种方式访问​​该流。在 initState() 上生成列表并将其显示在 ListView 中。如果生成确实需要一些时间,如果列表为空,您可以 return 一个 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'),
                   ),
                ],
              ),
            ),
          ),
    );
  }
}