我想改变我点击后的颜色和轨迹图标.问题是图标和thrail不改变后,我点击索引.下面是我代码:
Widget _builduserlist(BuildContext context, List<postmodel> model) {
List<bool> itemTappedState = List.generate(model.length, (index) => false);
return Center(
child: ListView.builder(
itemCount: model.length,
itemBuilder: (context, index) {
return Card(
color: itemTappedState[index]
? Colors.blue // Change the color when tapped
: Colors.green,
child: ListTile(
title: Text('${model[index].id}'),
subtitle: Text('${model[index].dateofinsp}'),
leading: const Icon(Icons.edit_road),
trailing: itemTappedState[index]
? const Icon(Icons.check)
: const Icon(Icons.warning), // Change the trailing icon when tapped
onTap: () {
print(itemTappedState[index].toString());
setState(() {
itemTappedState[index] = !itemTappedState[index];
print(itemTappedState[index].toString());
});
_showConfirmationDialog(context, model[index]);
},
),
);
},
),
);
}
我在setState()和setState()中打印了bool。它在setState()中改变,但在索引中不变。如何解决这个问题
2条答案
按热度按时间3okqufwl1#
问题是
itemTappedState
是在_builduserlist
方法中声明的:_builduserlist
方法在每个setState
都重新运行。因此,itemTappedState
将重置为您每次更新UI时设置的值。要解决这个问题,请将
itemTappedState
移动到State类中:zour9fqk2#
setState
在StatefulWidget
的State
内部工作。所以你应该像这样制作你的用户列表小部件:**注意:**将此代码放在顶层(在任何其他类之外)