我想实现单击ListView中的TextButton时进行背景颜色切换为选中状态并修改值。
当前现象为值修改完成但状态未更新,重新打开底部消息框时状态更新。
本人按照网上一些说法为showModalBottomSheet为无状态组件进行操作但未生效。求帮助!
showModalBottomSheet
showModalBottomSheet{
context: context,
builder: (BuildContext context) {
return StatefulBuilder(builder: (context, setState) {
return Container(
...//省略样式代码
child: Center(
child: Column(
children: [
...//省略无关代码
Container(
...//省略样式代码
child: child: ListView(
scrollDirection: Axis.horizontal,
children: CreateVipBuy(),
)
...//省略无关代码
CreateVipBuy()
List<Widget> CreateVipBuy() {
List<Widget> TButton = [];
List<Widget> Divs = [];
//生成5列2行的 TextButton
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 2; j++) {
if (i == Vip.VIPbuy[0] && j == Vip.VIPbuy[1]) {
Vip.BuyBottonBackground = Vip.BuyTButton_TrueColors;
Vip.BorderColor = Vip.BuyTButtonBorder_TrueColors;
} else {
Vip.BuyBottonBackground = Vip.BuyTButton_FalseColors;
}
Divs.add(Container(
...//省略样式代码
child: Stack(
alignment: Alignment.bottomCenter,
children: [
Container(
...//省略样式代码
child: TextButton(
onPressed: () {
print("点击了:第${j + 1}排第${i + 1}列");
TestViewState(i, j);
},
child: Column(
children: const [
...//省略无关代码
),
),
),
...//省略无关代码
],
),
));
}
TButton.add(Column(
children: [
Divs[0],
SizedBox(
height: 8.sp,
),
Divs[1],
],
));
if (i < 4) {
TButton.add(SizedBox(
width: 20.sp,
));
}
Divs.clear();
}
return TButton;
}
TestViewState(x,y)
void TestViewState(x, y) {
setState(() {
Vip.VIPbuy = [x, y];//修改全局变量
});
}