flutter - 如何在 Flutter 中使容器模糊?

标签 flutter blur

我正在使用 this package实现底部标签栏,我试图使背景具有“磨砂”外观,以便您仍然可以看到其下方的内容,但模糊。

每次我尝试展开底部选项卡时,它不仅模糊了容器,还模糊了整个屏幕。如何只模糊选项卡菜单而不是整个屏幕?

这是我的代码

class BottomNavBar extends StatelessWidget {
  const BottomNavBar({
    Key key,
    @required this.controller,
  }) : super(key: key);
 
  final BottomBarController controller;
 
  @override
  Widget build(BuildContext context) {
    return BottomExpandableAppBar(
      appBarHeight: 0,
      controller: controller,
      expandedHeight: 100,
      horizontalMargin: 10,
      bottomOffset: 0,
      expandedBackColor: Colors.transparent,
      expandedBody: Padding(
        padding: const EdgeInsets.only(left: 15.0, right: 15, top: 10),
        child: MenuDrawer(),
      ),
    );
  }
}
 
class MenuDrawer extends StatelessWidget {
  const MenuDrawer({
    Key key,
  }) : super(key: key);
 
  @override
  Widget build(BuildContext context) {
    return BackdropFilter(
      filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
          child: Container(
        decoration: BoxDecoration(
           
            borderRadius: BorderRadius.all(Radius.circular(20))),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: <Widget>[
            Card(
              child: Padding(
                padding: const EdgeInsets.all(4.0),
                child: Icon(Icons.save, size: 45, color: Colors.black),
              ),
              elevation: 30,
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(15.0),
              ),
            ),
            Card(
              child: Padding(
                padding: const EdgeInsets.all(4.0),
                child: Icon(Icons.save, size: 45, color: Colors.black),
              ),
              elevation: 30,
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(15.0),
              ),
            ),
            Card(
              child: Padding(
                padding: const EdgeInsets.all(4.0),
                child: Icon(Icons.list, size: 45, color: Colors.black),
              ),
              elevation: 30,
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(15.0),
              ),
            ),
            Card(
              child: Padding(
                padding: const EdgeInsets.all(4.0),
                child: Icon(Icons.person, size: 45, color: Colors.black),
              ),
              elevation: 30,
              color: Colors.amber,
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(15.0),
              ),
            )
          ],
        ),
      ),
    );
  }
}

最佳答案

我遇到了同样的问题,我找到的唯一解决方案是将容器和 BackdropFilter 包装在 Clipper Widget 中:

return ClipRRect(
  borderRadius: widget.radius,
  child: BackdropFilter(
    filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),
      child: ...,
    ),
  ),
);

关于flutter - 如何在 Flutter 中使容器模糊?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62641965/

相关文章:

android - Flutter,我可以为命名参数传递一个 Map

json - Flutter - 无法将所有 json 数据从 api 响应保存到 Iterable List 编辑 : ( Can't Fetch Data from iterable List)

html - 如何模糊div的背景图像,而不模糊其余站点或div的内容

javascript - jQuery 求和或相乘值始终没有事件触发

CSS模糊背景图片的一部分

flutter - 如何避免在繁重的计算中卡住 UI

flutter - 更改 TextField flutter 的选定文本颜色

javascript - 新的 Input 类不能使用 Focus 和 Blur 事件

angularjs - 如何强制 ng-click 优先于 ng-blur 事件?

flutter - 画倒三角形