title: ListTile not distinguish each item
body: <p>I'm working with BlockBuilder and it include a ListTile. But I click on one item, other items event click too. When I push it to new screen, it is one item, but I don't know why it isn't distinguished each other.</p>
  
  <p>This is my code in Android Studio:</p>
  
  
  
  <pre><code>      Widget _buildListTile(ProductItemModel item) {
      final bool alreadySaved = _saved.contains(item);
      return ListTile(
        title: Text(
          item.name,
          style: TextStyle(fontWeight: FontWeight.bold),
        ),
        subtitle: Text("Price: " + item.price),
        leading: Container(
          width: 69,
          height: 40,
          decoration: BoxDecoration(border: Border.all(color: Colors.black54)),
          child: Image.network(item.icon),
        ),
        trailing: new Icon(
          alreadySaved ? Icons.favorite : Icons.favorite_border,
          color: alreadySaved ? Colors.red : null,
        ),
        // event ontap to catch like/ don't like
        onTap: () {
          setState(() {
            if (alreadySaved) {
              _saved.remove(item);
              print("move"+item.name);
            } else {
              _saved.add(item);
              print("add"+item.name);
            }
          });
        },
      );
    }
  </code></pre>
  
  
  
  <p>This data from model, but I can't understand them....</p>
  
  <pre><code>This is my api, i get data from this...    
  
  
  class ProductApiProvider {
        Future&lt;ProductModel&gt; getListProduct() async {
          //await Future.delayed(Duration(seconds: 2));
          return ProductModel.fromJson([
            {
              "id": 1,
              "name": "RTX 2070s",
              "price" : "1.190 USD",
              "icon" : "https://assets.pcmag.com/media/images/518866-nvidia-geforce-rtx-2080-founders-edition-7.jpg?width=810&amp;height=456",
              "isLove" : false
  
            },
            {
              "id": 2,
              "name": "RTX 2080",
              "price" : "1.999 USD",
              "icon" : "https://assets.pcmag.com/media/images/518013-yeah-it-s-a-beast.jpg?width=810&amp;height=456",
              "isLove" : false
            },
  
            {
              "id": 3,
              "name": "Mainboard Z390",
              "price" : "499 USD",
              "icon" : "https://assets.pcmag.com/media/images/610433-meet-the-asrock-z390-taichi.jpg?thumb=y&amp;width=980&amp;height=456",
            },
            {
              "id": 4,
              "name": "Main Z370",
              "price" : "349 USD",
              "icon" : "https://assets.pcmag.com/media/images/498346-image-aorus-jpg.jpg?width=810&amp;height=456",
            },
            {
              "id": 5,
              "name": "I3 8100",
              "price" : "199 USD",
              "icon" : "https://assets.pcmag.com/media/images/465550-cpu-showdown-intel-core-i3-vs-i5.jpg?thumb=y&amp;width=810&amp;height=456"
            },
          ]);
        }
      }
  </code></pre>
  
  <p>and this is my model</p>
  
  <pre><code>This is my model
  
  class ProductItemModel extends Equatable
      {
        final int id;
        final String name;
        final String price;
        final String icon;
        final bool isLove;
  
        ProductItemModel({this.id, this.name, this.price, this.icon, this.isLove});
  
        factory ProductItemModel.fromJson(Map&lt;String, dynamic&gt; item)
        {
          return ProductItemModel(
            id: item["id"],
            name: item["name"],
            price: item["price"],
            icon: item["icon"],
            isLove: item["isLove"]
          );
        }
      }
  
      class ProductModel
      {
        List&lt;ProductItemModel&gt; listProduct;
  
        ProductModel(this.listProduct);
  
        factory ProductModel.fromJson(List&lt;dynamic&gt; json)
        {
          List&lt;ProductItemModel&gt; mapProduct = List&lt;ProductItemModel&gt;.from(json.map((item){
            return ProductItemModel.fromJson(item);
          }));
  
          return ProductModel(mapProduct);
        }
      }
  </code></pre>