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 中不起作用