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

Flutter如何隐藏Container半区 仅展示半部分圆形FortuneWheel幸运转盘

Flutter实现半屏展示FortuneWheel幸运转盘方案

需求说明

我有一个圆形的FortuneWheel幸运转盘,当前该组件会占满全屏,我希望仅展示转盘的半部分,将另一半区域隐藏,同时可以在页面放置功能按钮,具体效果可参考下方示例图片:
示例图片1
示例图片2

原有实现代码

body: Container(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Expanded(
              flex: 1,
              child: FortuneWheel(
                duration: Duration(seconds: 3),
                animateFirst: false,
                selected: selected.stream,
                items: [
                  FortuneItem(
                      child: Text('0'),
                      style: FortuneItemStyle(
                          color: Colors.green,
                          textStyle: TextStyle(
                              fontWeight: FontWeight.bold, fontSize: 15))),
                  FortuneItem(
                      child: Text('32'),
                      style: FortuneItemStyle(
                        color: Colors.grey,
                      )),
                  FortuneItem(child: Text('15')),
                  FortuneItem(child: Text('19')),
                  FortuneItem(child: Text('4')),
                  FortuneItem(child: Text('21')),
                  FortuneItem(child: Text('2')),
                ],
              ),
            ),
          ],
        ),
      ),

实现方案

通过裁剪组件限制转盘的显示区域即可达到效果,核心是使用ClipRect配合Align组件裁剪掉不需要展示的半部分转盘,剩余的页面空间可以直接放置功能按钮。
修改后的代码如下:

body: Column(
  crossAxisAlignment: CrossAxisAlignment.center,
  children: [
    // 半屏展示转盘区域
    Expanded(
      flex: 1,
      child: ClipRect(
        child: Align(
          // 对齐顶部,裁剪下半部分
          alignment: Alignment.topCenter,
          // 仅显示原高度的50%,即上半部分
          heightFactor: 0.5,
          child: FortuneWheel(
            duration: Duration(seconds: 3),
            animateFirst: false,
            selected: selected.stream,
            items: [
              FortuneItem(
                  child: Text('0'),
                  style: FortuneItemStyle(
                      color: Colors.green,
                      textStyle: TextStyle(
                          fontWeight: FontWeight.bold, fontSize: 15))),
              FortuneItem(
                  child: Text('32'),
                  style: FortuneItemStyle(
                    color: Colors.grey,
                  )),
              FortuneItem(child: Text('15')),
              FortuneItem(child: Text('19')),
              FortuneItem(child: Text('4')),
              FortuneItem(child: Text('21')),
              FortuneItem(child: Text('2')),
            ],
          ),
        ),
      ),
    ),
    // 下方功能按钮区域,可自定义添加任意组件
    Container(
      padding: EdgeInsets.all(20),
      child: ElevatedButton(
        onPressed: () {
          // 转盘启动逻辑
        },
        child: Text("开始抽奖"),
      ),
    )
  ],
),

补充说明

如果需要展示下半部分转盘,只需要把Align的alignment参数改为Alignment.bottomCenter即可。heightFactor参数可以根据需要调整显示比例,设置为0.5就是刚好显示半屏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:45:04