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

设置主页面背景色后Flutter底部弹窗透明效果失效求助

问题:主页面设置背景色后底部弹窗透明效果失效,需实现玻璃态透明弹窗

原本想实现底部弹窗打开时的透明效果,起初效果正常,但给主页面设置背景色后,弹窗的透明效果不再生效。

现有代码

class HomePage extends Stateful Widget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color.fromRGBO(80, 75, 60, 10),
      body: Center(
        child: ElevatedButton(
            onPressed: () {
              showCupertinoModalBottomSheet(
                barrierColor: Colors.transparent,
                expand: false,
                shape: const RoundedRectangleBorder(
                  borderRadius: BorderRadius.vertical(
                      top: Radius.circular(100.0)),
                ),
                context: context,
                builder: (BuildContext context) {
                  return CustomizedBottomSheet();
                }
              );
            },
            child: const Text(
              "open me",
            )
        ),
      ),
    );
  }
}

当前界面(未打开弹窗)

未打开弹窗的界面

期望效果

希望修改代码实现打开底部弹窗时的玻璃态透明效果:
玻璃态透明弹窗效果


解决方案

1. 修正主页面背景色的alpha值问题

你设置的Color.fromRGBO(80, 75, 60, 10)存在错误:RGBO的alpha通道取值范围是0-1,输入10会被自动修正为不透明(1.0),导致弹窗无法透过背景显示透明效果。将其改为正确的alpha值,比如要半透明可以设0.5,不透明则设1.0:

backgroundColor: Color.fromRGBO(80, 75, 60, 1.0),

2. 给弹窗添加玻璃态效果

要实现玻璃态,需要结合BackdropFilter(模糊背景)和半透明容器,修改CustomizedBottomSheet的实现:

首先导入dart:ui包:

import 'dart:ui';

然后编写弹窗代码:

class CustomizedBottomSheet extends StatelessWidget {
  const CustomizedBottomSheet({super.key});

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 300, // 自定义弹窗高度
      decoration: BoxDecoration(
        color: Colors.white.withOpacity(0.3), // 半透明白色背景
        borderRadius: const BorderRadius.vertical(top: Radius.circular(100)),
      ),
      child: BackdropFilter(
        filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), // 模糊强度,可自行调整
        child: const Center(
          child: Text("玻璃态弹窗内容"),
        ),
      ),
    );
  }
}

3. 保留弹窗的barrier透明设置

showCupertinoModalBottomSheet中的barrierColor: Colors.transparent可以保留,这样弹窗后方的主页面能完整显示,配合模糊效果实现玻璃态质感。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:41:17