Flutter 高斯模糊效果詳解

1.高斯模糊不限定大小

1.1-代碼封裝

import 'dart:ui';
/// describe
/// 高斯模糊效果合集
/// created by hujintao
/// created at 2019-09-12
//
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fpdxapp/utils/screen.dart';

/// 矩形高斯模糊效果
class BlurRectWidget extends StatefulWidget {
  final Widget child;

  /// 模糊值
  final double sigmaX;
  final double sigmaY;

  /// 透明度
  final double opacity;

  /// 外邊距
  final EdgeInsetsGeometry blurMargin;

  /// 圓角
  final BorderRadius borderRadius;

  const BlurRectWidget({
    Key key,
    this.child,
    this.sigmaX,
    this.sigmaY,
    this.opacity,
    this.blurMargin,
    this.borderRadius,
  }) : super(key: key);

  @override
  _BlurRectWidgetState createState() => _BlurRectWidgetState();
}

class _BlurRectWidgetState extends State<BlurRectWidget> {
  @override
  Widget build(BuildContext context) {
    return Container(
      margin: widget.blurMargin != null
          ? widget.blurMargin
          : EdgeInsets.only(bottom: ScreenUtil().setHeight(20)),
      child: ClipRRect(
        borderRadius: widget.borderRadius == null ? BorderRadius.only(
            topLeft: Radius.circular(10), topRight: Radius.circular(10)) : widget.borderRadius,
        child: BackdropFilter(
          filter: ImageFilter.blur(
            sigmaX: this.widget.sigmaX != null ? this.widget.sigmaX : 10,
            sigmaY: this.widget.sigmaY != null ? this.widget.sigmaY : 10,
          ),
          child: Container(
            color: Colors.white10,
            child: this.widget.opacity != null
                ? Opacity(
                    opacity: widget.opacity,
                    child: this.widget.child,
                  )
                : this.widget.child,
          ),
        ),
      ),
    );
  }
}

1.2 使用

Stack(
  overflow: Overflow.clip,
  alignment: Alignment(-1, 1),
  children: <Widget>[
    // 背景圖片
    Container(
      decoration: BoxDecoration(
          color: Color(0xffF3F4F5),
          borderRadius: BorderRadius.only(
            topLeft: Radius.circular(10.0),
            topRight: Radius.circular(10.0),
          ),
          image: DecorationImage(
              image: NetworkImage(getBackgroundImage(item)),
              fit: BoxFit.cover) //設(shè)置圖片的填充模式
          ),
      margin: EdgeInsets.only(bottom: ScreenUtil().setHeight(20)),
    ),
    // 矩形高斯模糊效果
    BlurRectWidget(
      child: Container(),
      sigmaY: alpha,
      sigmaX: alpha,
    ), 
    ],
)

1.3 效果圖

image.png

2.高斯模糊限定容器大小

關(guān)鍵代碼

// 頭像
  Stack(
    alignment: Alignment.center,
    children: <Widget>[
      // 頭像
      Container(
        width: ScreenUtil().setWidth(90),
        height: ScreenUtil().setWidth(90),
        decoration: BoxDecoration(
            color: Colors.blue,
            borderRadius: BorderRadius.circular(
                ScreenUtil().setWidth(45)),
            image: DecorationImage(
              alignment: Alignment.center,
              image: NetworkImage(
                item != null && item.user.headimgurl != null
                    ? item.user.headimgurl
                    : '',
              ),
            )),
      ),
      // 高斯模糊
      Stack(
        children: <Widget>[
          Center(
            child: ClipOval(
              child: BackdropFilter(
                filter: ImageFilter.blur(
                  sigmaX: alpha,
                  sigmaY: alpha,
                ),
                child: Container(
                  alignment: Alignment.center,
                  width: ScreenUtil().setWidth(90),
                  height: ScreenUtil().setWidth(90),
                  child: Text(
                    '   ',
                    style: TextStyle(fontSize: 20),
                  ),
                  color: Colors.white10,
                ),
              ),
            ),
          ),
        ],
      )
    ],
  ),

效果圖

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自http://www.itdecent.cn/p/02da487a2f43 近年來,圖片高斯模糊備受設(shè)計(jì)師的...
    龐哈哈哈12138閱讀 2,954評論 1 23
  • 近年來,圖片高斯模糊備受設(shè)計(jì)師的青睞,在各大知名APP中,如微信、手機(jī)QQ、網(wǎng)易云音樂等等都有對背景高斯圖模糊的設(shè)...
    依然范特稀西閱讀 46,406評論 19 203
  • 第十章將談到相互利他行為這個(gè)重要概念,即“于人方便,于己方便”的原則 動(dòng)物之所以要聚居在一起,肯定是因?yàn)樗麄兊幕?..
    happyday2333閱讀 648評論 0 3
  • 線程、進(jìn)程 1.iOS中的多線程操作、多線程方式? 2.多線程的優(yōu)點(diǎn)和缺點(diǎn)分別是什么? 答:優(yōu)點(diǎn):1、將耗時(shí)較長的...
    丶逐漸閱讀 1,466評論 0 8
  • 雨中獨(dú)行 2014-7-4 11:48 又傳來那對夫妻吵架聲,忽高忽低,忽大忽小,歇斯底里,發(fā)泄著積怨已久的憤怒和不滿。
    夕陽在山閱讀 137評論 0 0

友情鏈接更多精彩內(nèi)容