【发布时间】:2019-11-28 06:33:14
【问题描述】:
问题是,每当我点击 Like 按钮时,按钮图标和文本的颜色都不会改变,因为我正在更新 onPressed() 方法。可能是什么问题,请指导?我正在试验过去 1 个月的颤振。
这是我的课程代码:
class SingelBattleAllComments extends StatefulWidget {
final int battleId; // add info
SingelBattleAllComments({@required this.battleId});
@override
_SingelBattleAllCommentsState createState() =>
_SingelBattleAllCommentsState(battleId: battleId);
}
class _SingelBattleAllCommentsState extends State<SingelBattleAllComments> {
final int battleId; // add info
final List<String> profileImages = [
'https://www.codecyan.com/images/omi-shah-codecyan-founder-ceo.jpg'];
Color likeButtonColor;
List<Widget> commentsListItems;
_SingelBattleAllCommentsState({@required this.battleId});
@override
void initState() {
likeButtonColor = new Color(0xff333030);
commentsListItems = List<Widget>.generate(5, (i) {
return Column(
children: <Widget>[
SizedBox(height: 15),
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(10)),
color: Colors.white,
border: Border.all(color: Colors.black12, width: 1)),
child: Padding(
padding: EdgeInsets.all(7),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
ClipRRect(
borderRadius: BorderRadius.circular(50.0),
child: CachedNetworkImage(
fit: BoxFit.cover,
imageUrl: profileImages[0
],
width: 50,
height: 50)),
SizedBox(width: 10),
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text("OMi Shah",
style: TextStyle(
fontWeight: FontWeight.bold,
)),
SizedBox(height: 3),
Container(
width: 250, //screenWidth * 0.65,
child: Text(
"Hello",
),
),
SizedBox(height: 5),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
FlatButton.icon(
onPressed: () {
setState(() {
likeButtonColor = Colors.red;
});
},
label: Text("Like (291)",
style:
TextStyle(color: likeButtonColor)),
icon: Icon(Icons.thumb_up,
color: likeButtonColor),
),
SizedBox(width: 15),
FlatButton.icon(
onPressed: () {},
label: Text("Report",
style: TextStyle(
color: const Color(0xff333030))),
icon: Icon(Icons.report,
color: const Color(0xff333030)),
),
],
)
])
])))
],
);
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: ListView.builder(
padding:
EdgeInsets.only(left: 20, top: 10, right: 20, bottom: 10),
itemCount: commentsListItems.length,
itemBuilder: (BuildContext ctxt, int index) {
return commentsListItems[index];
}),
));
}
}
这是输出截图:
谢谢。
【问题讨论】:
-
你为什么要把所有的代码都放在 initState 中?
-
我已经放入 initState() 来填充一些演示数据?我做错了吗?
-
实际上
setState有效(尝试在setState中添加commentsListItems.removeLast();),这将有效。我认为当您使用 List.generate 并返回 Column 时,不再引用 likeButtonColor。所以:这不是关于 setState,而是关于你的列表使用情况 -
@IbrahimKarahan 实际上,你是对的。但是,我不知道为什么颜色没有更新:(