title: Flutter Rebuild Just One Row in ListView
body: <p>I have one listview in my app. Each row has some buttons that affect only that same row. I don't want to refresh whole <code>Listview</code>. When I call <code>setState()</code> on tapping buttons, that causes the whole <code>Listview</code> to refresh.</p>
  
  <p>How to do refreshing on just the same row of tapping buttons inside the row?</p>
  
  <p>In my code tapping on a button must cause a change color of the same button:</p>
  
  <pre><code>....
  ....
  ....
  
  List&lt;mPlay&gt; playList = new List();
  
  ....
  ....
  ....
  
  @override
    Widget build(BuildContext context) {
      return new Directionality(
          textDirection: globals.textDirection,
          child: new Scaffold(
              key: globalKey,
              body: (playList != null &amp;&amp; playList.length &gt; 0)
                  ? new SmartRefresher(
                      headerBuilder: _buildHeader,
                      enablePullDown: true,
                      enablePullUp: true,
                      onRefresh: _onRefresh,
                      onOffsetChange: _onOffsetCallback,
                      child: new ListView.builder(
                        padding: const EdgeInsets.all(0),
                        itemCount: playList.length,
                        itemBuilder: (context, i) {
                          return _buildRow(playList[i], i);
                        },
                      ))
                  : EmptyWidget()));
    }
  
    Widget _buildRow(mPlay play, int index) {
    return new Card(
          child: new Container(
          child: new Row(children: &lt;Widget&gt;[
          new InkWell(
                              child: new IconButton(
                                  icon: Icon(
                                    Icons.group_add,
                                    color: play.isContributed == "1"
                                        ? Colors.blueAccent
                                        : Colors.black,
                                  ),                                
                                  onPressed: () {
                                    play.isContributed =
                                        play.isContributed == "0" ? "1" : "0";
                                    setState(() {
                                      playList[index].isContributed =
                                          play.isContributed;
                                    });
                                  }))
          ])
          ))
  
  
    }
  </code></pre>