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

Flutter中能否在CupertinoSlidingSegmentedControl用条件语句控制显示选项数量

问题解决:CupertinoSlidingSegmentedControl 动态展示选项

你运行失败的核心原因是:Dart 支持在集合(List/Map/Set)中直接用if条件语法动态插入元素,语法要求不能给条件后的元素额外套一层花括号,你之前的写法多了{}才会报错。

正确写法如下:

child: CupertinoSlidingSegmentedControl(
    children: {
      0: const Text('Option 1'),
      1: const Text('Option 2'),
      // 集合if直接写,不需要额外加{}
      if (myInteger > 0) 2: const Text('Option 3'),
    },
    groupValue: _sliding,
    onValueChanged: (newValue) {
      // 可选优化:避免myInteger变小时_sliding持有无效值2导致异常
      if (newValue != null) {
        if (myInteger <= 0 && newValue == 2) {
          _sliding = 0;
        } else {
          _sliding = newValue as int;
        }
      }
    }),

补充说明

  • 你之前加的额外花括号相当于往Map里塞了另一个Map对象,不符合CupertinoSlidingSegmentedControl要求的Map<int, Widget>类型定义,所以会触发编译/运行错误。
  • 建议在onValueChanged或者监听myInteger变化的逻辑中加校验,避免当myInteger从大于0变成小于等于0时,当前选中的_sliding值为2,出现groupValue不在children键集合中的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:51:02