栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从列表中删除项目后更新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,    );  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/404226.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号