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

Flutter插件flutter_fortune_wheel:无法修改FortuneBar中FortuneItem的颜色?

解决Flutter FortuneItem颜色自定义问题

问题出在你使用的AlternatingStyleStrategy——这个默认样式策略会覆盖单个FortuneItem的自定义样式,同时直接给child套Container也会被插件内部布局层级覆盖,所以之前的方法都没效果。

下面提供两种可行的解决方案:

方案1:直接给单个FortuneItem设置样式

移除styleStrategy参数(或替换为自定义策略),直接通过FortuneItem的style属性指定颜色:

FortuneBar(
  selected: StreamController<int>.broadcast().stream,
  items: [
    for (var reward in listManager.rewardsList)
      FortuneItem(
        child: Text(reward),
        // 自定义item的背景色和边框色
        style: FortuneItemStyle(
          color: Color.fromARGB(255, 245, 215, 66),
          borderColor: Color.fromARGB(255, 30, 30, 30),
        ),
      ),
  ],
)

方案2:自定义全局样式策略

如果需要批量给所有item设置样式(比如交替或循环颜色),可以自定义StyleStrategy类替代默认的AlternatingStyleStrategy:

// 自定义样式策略类
class CustomWheelStyleStrategy extends StyleStrategy {
  @override
  FortuneItemStyle getStyle(int index, int itemCount) {
    // 可根据index设置不同颜色,比如循环使用颜色列表
    final colorList = [
      Color.fromARGB(255, 113, 250, 202),
      Color.fromARGB(255, 60, 79, 118),
      Color.fromARGB(255, 255, 182, 193),
    ];
    return FortuneItemStyle(
      color: colorList[index % colorList.length],
      borderColor: Colors.white,
    );
  }
}

// 在FortuneBar中使用自定义策略
FortuneBar(
  styleStrategy: CustomWheelStyleStrategy(),
  selected: StreamController<int>.broadcast().stream,
  items: [
    for (var reward in listManager.rewardsList)
      FortuneItem(child: Text(reward)),
  ],
)

注意:如果同时设置了styleStrategy和单个FortuneItem的style,策略会优先生效,单个item的样式会被忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:27:09