从列表中删除项目后更新UI

从列表中删除项目后更新UI,第1张

列表删除项目后更新UI

我不想仅为更新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,    );  }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5013549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存