我有一个带有一些图像的 GridView。如果 GestureDetector 检测到 onTap 事件,我希望图像应用 ColorFilter。我为整个 imageList 得到了这个,但我只希望单击的图像应用 ColorFilter。有办法吗?
ColorFilter getColorFilter (index) {
if(activeImages[index]) {
return ColorFilter.mode(Colors.black.withOpacity(0.2), BlendMode.dstATop);
}
return null;
}
GridView.builder(
scrollDirection: Axis.horizontal,
itemCount: imageList.length,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2,childAspectRatio: 1.32, mainAxisSpacing: 5.0),
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () {_onTap(index);},
child: Container(
height:MediaQuery.of(context).size.width * 0.3,
width: MediaQuery.of(context).size.width * 0.6,
margin: const EdgeInsets.only(bottom: 10.0),
decoration: BoxDecoration(
image: DecorationImage(
image: new AssetImage(imageList[index]),
colorFilter: getColorFilter(index),
fit: BoxFit.fitHeight,
),
borderRadius: BorderRadius.all(
Radius.circular(15)
),
),
),
);
},
)
编辑:
void _onTap(index) {
setState(() {
activeImages[index] = !activeImages[index];
});
}