Anesu Mazvimavi
Anesu Mazvimavi

Reputation: 139

Flutter Inkwell Ontap not working inside a Stack

I am building a flutter ecommerce app and I am having an issue where ontap isn't working inside my inkwell widget. I want the ontap to work so that I can show the product description. I have placed the inkwell widget as a child inside a Positioned widget, which happens to be one of the children of a Stack. How can I solve this?

Here's my code:

return Card(
  shadowColor: Colors.grey,
  surfaceTintColor: Colors.amber,
  shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(20)),
  child: Stack(
    children: [
      Positioned(
        right: 0,
        child: InkWell(
          onTap: () {
            print('tapped');
            Navigator.push(
                context,
                MaterialPageRoute(
                    builder: (context) =>
                        ProductDetails(
                            id: bottleCategory
                                .bottleList[index].id,
                            bottleName: bottleCategory
                                .bottleList[index]
                                .bottleName,
                            image: bottleCategory
                                .bottleList[index]
                                .image,
                            price: bottleCategory
                                .bottleList[index]
                                .price)));
          },
          child: IconButton(
            icon: favoriteProvider.isExist(
                    bottleCategory.bottleList[index])
                ? Icon(
                    Icons.favorite,
                    color: Colors.redAccent,
                  )
                : Icon(
                    Icons.favorite_border,
                  ),
            onPressed: (() {
              favoriteProvider.toggleFavorites(
                  bottleCategory.bottleList[index]);
              if (favoriteProvider.isExist(
                  bottleCategory.bottleList[index])) {
                ScaffoldMessenger.of(context)
                    .hideCurrentSnackBar();
                ScaffoldMessenger.of(context)
                    .showSnackBar(
                  const SnackBar(
                    content: Text(
                      "Product Added to Favorite!",
                      style: TextStyle(fontSize: 16),
                    ),
                    backgroundColor: Colors.green,
                    duration: Duration(seconds: 1),
                  ),
                );
              } else {
                ScaffoldMessenger.of(context)
                    .hideCurrentSnackBar();
                ScaffoldMessenger.of(context)
                    .showSnackBar(
                  const SnackBar(
                    content: Text(
                      "Product Removed from Favorite!",
                      style: TextStyle(fontSize: 16),
                    ),
                    backgroundColor: Colors.red,
                    duration: Duration(seconds: 1),
                  ),
                );
              }
            }),
          ),
        ),
      ),
      Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Center(
            child: Image.asset(
              bottleCategory.bottleList[index].image,
              height: 200.0,
            ),
          ),
          Center(
              child: Text(
                  bottleCategory
                      .bottleList[index].bottleName,
                  style: const TextStyle(
                      fontSize: 20.0,
                      fontWeight: FontWeight.bold))),
          Center(
            child: Text(
                'R${bottleCategory.bottleList[index].price}'),
          )
        ],
      ),
      Positioned(
          bottom: 0,
          right: 10,
          child: IconButton(
            icon: const Icon(Icons.add_circle),
            iconSize: 40.0,
            onPressed: () {
              cart.addToCart(
                  bottleCategory.bottleList[index].id,
                  bottleCategory
                      .bottleList[index].bottleName,
                  bottleCategory
                      .bottleList[index].price,
                  bottleCategory
                      .bottleList[index].image);
            },
          ))
    ],
  ),
);

Upvotes: 0

Views: 634

Answers (1)

aminjafari-dev
aminjafari-dev

Reputation: 313

Why do you use IconButton in the child of InkWell? use one of them and Put all of your onPress functions into that widget.

Upvotes: 1

Related Questions