Я построил просмотр списка, в котором в качестве плитки используется виджет состояния.Все замечательно, за исключением проблемы, заключающейся в том, что кнопки в плитке не перестраиваются, когда я вызываю на них 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;
});
},
);
}
}