SetState в плитке списка не перестраивается - PullRequest
0 голосов
/ 04 февраля 2019

Я построил просмотр списка, в котором в качестве плитки используется виджет состояния.Все замечательно, за исключением проблемы, заключающейся в том, что кнопки в плитке не перестраиваются, когда я вызываю на них setState.

У меня также есть поле редактирования в одной из плиток, и у него есть texteditcontroller, и оно работает, когда я нажимаю кнопку, и даже без использования setstate.Могу ли я сделать что-то подобное с ключом или что-то подобное?Ниже приведен пример кода моей установки.Это очень простая версия гораздо большего кода.

class FeedContent extends StatefulWidget {

  @override
  State<StatefulWidget> createState() => FeedContentState();
}
  class FeedContentState extends State<FeedContent>{

    @override
  Widget build(BuildContext context) {

     return new Scaffold(   
     body:  RefreshIndicator(
    key: _refreshIndicatorKey,
    onRefresh: _refresh,
    child: Stack( 
        // fit: StackFit.expand,
    children: <Widget>[
      Container(
        color: Colors.grey[200],
        padding: EdgeInsets.only(top: 0.0, left: 7.0, right:7.0, bottom: 0.0),
        child: FutureBuilder(
          future: fetchFeedData(),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          if(snapshot.data == null){
            return Container(
              child: Center(
                child: Text(
                  "Loading....",
                  ),
              ),
            );
          }else{
            return ListView.builder(
          itemCount: snapshot.data.length,
          itemBuilder: (BuildContext context, index) {
            return Container(
              child: ListTileGenerator(
                feeddata: snapshot.data,
                feedindex: index,
              ) 
            );
          },
        );
          }
            },
        ),
      ),
    ],
    ),
    ),
   );
    }

  }


  class ListTileGenerator extends StatefulWidget{
  ListTileGenerator({this.feeddata, this.feedindex});

  final List feeddata;
  final int feedindex;


  @override
  State<StatefulWidget> createState() => ListTileGeneratorState();
}

class ListTileGeneratorState extends State<ListTileGenerator>{

  Color goBtn;

  @override
  void initState() {
    goBtn = Color(0xFF3489D8);
    super.initState();
  }


  @override
  Widget build(BuildContext context){

    return setTile();
  }

Widget setTile(){
  return GestureDetector(
                          child: Container(
                            width: 40.0,
                            height: 40.0,
                            margin: EdgeInsets.only(left: 15.0),
                            decoration: BoxDecoration( 
                            color: goBtn,
                            shape: BoxShape.circle,
                        ),
                          child: Align(
                          alignment: Alignment.center,
                        child: Text("Go",
                        style: TextStyle(color: Colors.white, fontWeight: FontWeight.w700),
                          textAlign: TextAlign.center,
                          ),
                          ),
                        ),
                        onTap: (){
                          //this is working and removing text from a textedit
                          textUpateController.clear();
                            this.setState((){
                              print("set state called on: ${setState.toString()}");
                              goBtn = Colors.red;
                              });
                        },
                        );

      }

}
...