You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter BMI应用中GenderWidget选中状态颜色修改实现问题

解决Flutter BMI应用性别选择的高亮显示问题

你需要通过给GenderWidget添加选中状态参数,结合父组件的状态管理实现点击时的颜色差异标记,具体修改步骤如下:

1. 修改GenderWidget组件

给组件新增isSelected布尔参数,用来判断当前性别是否被选中,再在UI元素中根据该参数切换样式:

class GenderWidget extends StatelessWidget {
  final VoidCallback onclick;
  final String title;
  final IconData icon;
  // 新增选中状态参数
  final bool isSelected;

  GenderWidget({
    required this.onclick,
    required this.title,
    required this.icon,
    required this.isSelected, // 初始化参数
  });

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: onclick,
      child: Container(
        child: Center(
            child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            Text(
              title,
              style: mytextgender,
            ),
            Icon(
              icon,
              // 根据isSelected切换图标颜色
              color: isSelected ? Colors.red : Colors.black,
              size: 80,
            ),
            SizedBox(
              height: 20,
              // 根据isSelected显示选中提示
              child: isSelected ? const Text('Selected') : null,
            )
          ],
        )),
      ),
    );
  }
}

2. 修改父组件的调用逻辑

在父组件中,将maleselected和femaleselected变量分别传给对应GenderWidget的isSelected参数,确保状态更新后UI同步刷新:

Row(
  children: [
    Expanded(
        child: MyContainer(
      child: GenderWidget(
        onclick: () {
          maleselected = true;
          femaleselected = false;
          setState(() {}); // 触发UI刷新
        },
        title: 'Male',
        icon: Icons.male,
        isSelected: maleselected, // 传递男性选中状态
      ),
    )),
    Expanded(
        child: MyContainer(
      child: GenderWidget(
        onclick: () {
          maleselected = false;
          femaleselected = true;
          setState(() {}); // 触发UI刷新
        },
        title: 'Female',
        icon: Icons.female,
        isSelected: femaleselected, // 传递女性选中状态
      ),
    )),
  ],
)

效果说明

点击任意性别选项时,父组件会更新对应的布尔变量并调用setState刷新UI,GenderWidget会根据传入的isSelected参数自动切换图标颜色和显示选中提示,实现选中状态的视觉标记。

内容的提问来源于stack exchange,提问作者Irfan Ganatra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 07:54:22