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

Flutter中如何在BackdropFilter.blur内创建100×100的清晰区域

在Flutter的BackdropFilter.blur中创建100×100的无模糊清晰区域

要实现这个需求,核心是通过Stack叠加图层,精准控制指定区域的模糊效果,让底层内容在目标区域清晰显示。以下是完整可运行的实现代码:

import 'dart:ui';
import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Stack(
          fit: StackFit.expand,
          children: [
            // 底层内容:可替换为任意你需要的组件(文本、布局、图片等)
            const Image(
              image: NetworkImage('https://picsum.photos/800/600'),
              fit: BoxFit.cover,
            ),
            // 全屏模糊层
            BackdropFilter(
              filter: ImageFilter.blur(sigmaX: 8, sigmaY: 8),
              child: Container(color: Colors.black.withOpacity(0.1)),
            ),
            // 100×100的无模糊清晰区域(这里居中定位)
            Positioned(
              left: (MediaQuery.of(context).size.width - 100) / 2,
              top: (MediaQuery.of(context).size.height - 100) / 2,
              child: Container(
                width: 100,
                height: 100,
                child: BackdropFilter(
                  filter: ImageFilter.blur(sigmaX: 0, sigmaY: 0),
                  child: Container(color: Colors.transparent),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

关键细节:

  • Stack的fit: StackFit.expand确保模糊层铺满整个父容器范围
  • 模糊层的sigmaX/sigmaY控制模糊强度,数值越大模糊效果越明显,可按需调整
  • 清晰区域通过Positioned的left/top参数定位,修改这两个值可以调整清晰区域的位置
  • 内部嵌套的BackdropFilter设置模糊参数为0,直接透出底层的清晰内容,兼容性比混合模式清除更好

内容的提问来源于stack exchange,提问作者Чечил Крым

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:02:11