Flutter ListView删除项目不起作用

Posted

技术标签:

【中文标题】Flutter ListView删除项目不起作用【英文标题】:Flutter ListView delete Items not working 【发布时间】:2021-06-28 17:53:32 【问题描述】:

我有一个带有小部件的 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 类是一个有状态的小部件。

【问题讨论】:

你是如何调用 setState 的? 在我的 Button 的 onPress 函数中,我调用 setState(() verlustContentList.removeLast(); ); 尝试在设置状态之外调用您的 removeLast 函数并添加 setState(());之后... 不,不解决它 【参考方案1】:

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'),
                   ),
                ],
              ),
            ),
          ),
    );
  

【讨论】:

以上是关于Flutter ListView删除项目不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:在 ListView 中按下卡片小部件不起作用

带有 Tiles 的 ListView 在 Flutter 中不起作用

Flutter ListView scrollPhysics 在 SingleChildScrollView 中不起作用

imageCache.clear() 在 Flutter 中的 ListView 上不起作用

Flutter:在 ListView 中动画项目删除

在 Flutter Listview 中选择卡片