0

我有一个带有一些图像的 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];
    });
}
4

0 回答 0