我不想仅为更新UI而创建列表的新实例。
Flutter使用不可变对象。不遵循此规则会违反反应框架。减少错误是自愿的。
事实是,这种不变性在这里特别是为了防止开发人员执行当前的工作:具有依赖于类之间共享对象的同一实例的程序;因为可能要修改多个类。
真正的问题在于,这是您的列表项从列表中删除删除元素。
事情是因为是您的项目在进行计算,因此永远不会通知父项列表已更改。因此,它不知道应该重新渲染。因此,外观没有任何变化。
要解决此问题,您应该将删除逻辑移至父级。并确保父级正确地进行相应的调用
setState。这将转化为将回调传递给您的列表项,删除后将调用该回调。
这是一个例子:
class MyList extends StatefulWidget { @override _MyListState createState() => _MyListState();}class _MyListState extends State<MyList> { List<String> list = List.generate(100, (i) => i.toString()); @override Widget build(BuildContext context) { return ListView.builder( itemCount: list.length, itemBuilder: (context, index) { return MyItem(list[index], onDelete: () => removeItem(index)); }, ); } void removeItem(int index) { setState(() { list = List.from(list) ..removeAt(index); }); }}class MyItem extends StatelessWidget { final String title; final VoidCallback onDelete; MyItem(this.title, {this.onDelete}); @override Widget build(BuildContext context) { return ListTile( title: Text(this.title), onTap: this.onDelete, ); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)