Flutter的Fliter Widget 也是非常强大的,它可以制作出你想要的神奇滤镜效果。这节我们就以实战的方式,制作一个毛玻璃效果,通过实例来学习Fitler 的用法。(制作效果如下图)
main.dart文件编写
import 'package:flutter/material.dart';
import 'frosted_glass_demo.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title:'Flutter Demo',
theme:ThemeData(
primarySwatch: Colors.blue,
),
home:Scaffold(
body:FrostedGlassDemo(),
)
);
}
}
BackdropFilter Widget
BackdropFilter就是背景滤镜组件,使用它可以给父元素增加滤镜效果,它里边最重要的一个属性是filter。 filter属性中要添加一个滤镜组件,实例中我们添加了图片滤镜组件,并给了模糊效果。
我们新建一个 frosted_glass_demo.dart 的文件,然后写入下面的代码,具体的解释已经写到了代码的注释中。
import 'package:flutter/material.dart';
import 'dart:ui'; //引入ui库,因为ImageFilter Widget在这个里边。
class FrostedGlassDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body:Stack( //重叠的Stack Widget,实现重贴
children: <Widget>[
ConstrainedBox( //约束盒子组件,添加额外的限制条件到 child上。
constraints: const BoxConstraints.expand(), //限制条件,可扩展的。
child:Image.network('https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1583633261&di=988b155e021c7681c06f4ea4ae8ed718&src=http://n.sinaimg.cn/sinacn15/126/w690h1036/20180829/4441-hikcahf3625873.jpg')
),
Center(
child: ClipRect( //裁切长方形
child: BackdropFilter( //背景滤镜器
filter: ImageFilter.blur(sigmaX: 1.0,sigmaY: 1.0), //图片模糊过滤,横向竖向都设置5.0
child: Opacity( //透明控件
opacity: 0.3,
child: Container(// 容器组件
width: 500.0,
height: 80.0,
decoration: BoxDecoration(color:Colors.grey.shade200), //盒子装饰器,进行装饰,设置颜色为灰色
child: Center(
child: Text(
'欧阳娜娜',
style: Theme.of(context).textTheme.display3, //设置比较酷炫的字体
),
),
),
),
),
),
)
],
)
);
}
}
这个代码嵌套很多,所以一定要注意你的代码层次,容易出错的地方就是嵌套错误。这个效果尽量少用,因为我测试了一下,它对系统的消耗还是比较大的。