如何解决即使使用setState{}
我有一个底表,有一堆列表磁贴,其中一个是“添加到收藏夹”,主要思想是当用户点击该列表磁贴时,其图标和文本从icon: heart_outline & text: add to favorite
变为{{1} }即使我使用setState和有状态的小部件,更改也受icon: heart_filled & text: remove from favorite
的控制,直到关闭底表并再次将其重新打开,UI才会改变
这是我出现的代码:
isFavorite
解决方法
代码问题在于整个列表只有一个状态变量。
相反,您应该有一个具有其自身状态的列表项小部件。
例如:
class OrderListItem extends StatefulWidget {
final OrderItem orderItem;
const OrderListItem(this.orderItem);
@override
_OrderListItemState createState() => _OrderListItemState();
}
class _OrderListItemState extends State<OrderListItem> {
var _showMore = false;
@override
Widget build(BuildContext context) {
return Card(
margin: const EdgeInsets.all(10),child: Column(
children: <Widget>[
ListTile(
title: Text('\$${widget.orderItem.amount}'),subtitle: Text(DateFormat().format(widget.orderItem.orderDate)),trailing: IconButton(
icon: Icon(_showMore ? Icons.expand_less : Icons.expand_more),onPressed: () {
setState(() {
_showMore = !_showMore;
});
},),if (_showMore) Divider(),if (_showMore)
Container(
height: min(widget.orderItem.products.length * 20.0 + 10,120),margin: const EdgeInsets.symmetric(
vertical: 5,horizontal: 15,// irrelevant code
],);
}
}
_showMore是用于扩展ListTile的状态变量(与上下文无关)
这是一个OderListItem小部件,所以现在当我编写ListView.builder
ListView.builder(
itemBuilder: (ctx,index) =>
OrderListItem(ordersData.orders[index]),itemCount: ordersData.orders.length,
每个元素都是有状态的小部件。
因此,当我在任何OrderItem上按showMore按钮时,它只会更改其自身的状态,而不会影响其他任何项目。
以这种方式执行代码,它应该可以工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。