Flutter开发中未选中任何chip时如何禁用Select按钮?
Flutter实现未选中Chip时禁用Select按钮方案
你代码中已经维护了三个存储选中Chip的列表_statusFilters、_projectCodeFilters、_laborFilters,只需要基于这三个列表的非空状态控制按钮即可,两步即可实现:
- 给
_ChipDemoState类新增一个判断是否有选中Chip的计算属性:
bool get hasSelectedChip { return _statusFilters.isNotEmpty || _projectCodeFilters.isNotEmpty || _laborFilters.isNotEmpty; }
- 修改Select按钮的
ElevatedButton配置,Flutter中按钮的onPressed属性传null时会自动进入禁用状态,同时适配禁用状态的背景色:
ElevatedButton( style: ButtonStyle( // 适配禁用状态的背景色 backgroundColor: MaterialStateProperty.resolveWith((states) { if (states.contains(MaterialState.disabled)) { return Colors.grey.shade400; } return const Color(0xFF023E8A); }), shape: MaterialStateProperty.all<RoundedRectangleBorder>( RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0), ) ) ), // 无选中Chip时传null禁用按钮 onPressed: hasSelectedChip ? () async { // 原有Select按钮的点击逻辑写在这里 } : null, child: Text('Select', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w700, fontFamily: "Roboto", fontSize: 16.0,)), )
附加优化建议
你代码中定义的_isSelected变量从未被更新,属于无效变量可以删除。同时你当前FilterChip的文字颜色判断逻辑错误,选中状态下文字还是灰色,可对应修改每个Chip的label样式:
// 以Status类的Chip为例,其余两类Chip同理修改 Text( company.name, style: TextStyle( color: _statusFilters.contains(company.name) ? Colors.white : Colors.grey, fontFamily: "Roboto", ), ),
内容的提问来源于stack exchange,提问作者Hansen Tandi
相关产品推荐
相关产品推荐

