flutter - 如何在 onPressed() 中动态更改凸起按钮的背景颜色
问题描述
我有一个凸起按钮列表,我希望所选按钮的背景颜色在其 onPressed() 中更改
我尝试更改 setState 中的颜色,但它没有做任何事情。
这是生成按钮列表的函数
List<Widget> _makeZoneList(List<Zone> zones) {
List<Widget>Buttons = new List();
for (int i = 0; i < zones.length; i++) {
Buttons.add(RaisedButton(
color: zones[i].isSelected ? AppColors.primaryColor : AppColors.white,
onPressed: () {
setState(() {
if (zones[i].isSelected){
zones[i].isSelected = false;
}
else{
zones[i].isSelected = true;
}
print(zones[i].isSelected.toString());
});
},
child: Text(zones.elementAt(i).text)
));
}
return Buttons;
}
这是我调用函数的地方
Widget _zoneBody() {
return Padding(
padding: EdgeInsets.all(32),
child: StreamBuilder<List<Zone>>(
stream: GetterBloc.zonesStream,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return new Container();
} else {
if (snapshot.hasData) {
return Wrap(
spacing: 6.0, // gap between adjacent chips
children: _makeZoneList(snapshot.data));
} else {
return new Container();
}
}
}));
}
当我按下任何按钮时,它的 isSelected 值会发生变化,但背景不会相应改变
解决方案
更新答案 ( ElevatedButton
)
由于RaisedButton
现在已弃用,请使用ElevatedButton
:
代码:
class _MyState extends State<MyPage> {
bool _flag = true;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ElevatedButton(
onPressed: () => setState(() => _flag = !_flag),
child: Text(_flag ? 'Red' : 'Green'),
style: ElevatedButton.styleFrom(
primary: _flag ? Colors.red : Colors.teal, // This is what you need!
),
),
),
);
}
}
旧答案
由于未定义的类和变量,很难实现您的代码,但是我创建了一个小示例,它将帮助您找到所需的内容。
List<bool> _list = [true, false, true, false];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Title")),
body: ListView(children: _buildButtons()),
);
}
List<Widget> _buildButtons() {
List<Widget> listButtons = List.generate(_list.length, (i) {
return RaisedButton(
color: _list[i] ? Colors.green : Colors.red,
onPressed: () {
setState(() {
_list[i] = !_list[i];
});
},
child: Text("Button #${i}"),
);
});
return listButtons;
}
输出:
推荐阅读
- python - SQLAlchemy match() 使用自然语言而不是布尔值
- visual-studio - 项目文件夹结构更改后,Visual Studio 2017 调试器一直在寻找 DLL 的 .obj 文件
- python-3.x - 用图像中的形状替换值
- python-3.x - Jupyter notebook 太慢导致浏览器崩溃
- python - 如何从用户指定的 txt 列表中删除行?
- azure - 在 Azure devops 板上记录 scrum 会议纪要
- laravel - Laravel 计划不运行更新数据库中的数据
- mysql - 未找到 My SQL 中更新过程的错误处理
- ruby-on-rails - 如何删除 Rails-Admin
- linux - 如何编写输出具有两个对应变量的表的脚本?