我试图在 Flutter 中仅模糊背景的特定部分,但我的整个背景都变得模糊了。我的屏幕中央有一个 SizedBox,我希望 SizedBox 布局的背景部分变得模糊。
这是我的代码:
return new Container(
decoration: new BoxDecoration(
image: new DecorationImage(
image: new ExactAssetImage("images/barber.jpeg"),
fit: BoxFit.cover
)
),
child: new SizedBox(
height: 200.0,
width: 200.0,
child: new BackdropFilter(
filter: new ui.ImageFilter.blur(
sigmaX: 5.0,
sigmaY: 5.0,
),
child: new Center(
child: new Text("Hi"),
),
),
),
);
}
这是发生的事情:
我什至不知道为什么我的文字是红色的并且有黄色下划线。我想要的是仅模糊 sizedBox 的区域。
最佳答案
你的 SizedBox 现在基本上会被忽略,因为你没有告诉 flutter 在它的父级中渲染它的位置。所以你需要将它包裹在一个中心(或其他对齐方式)。
您还需要使用 ClipRect 来包装您的 SizedBox,以便将 BackdropFilter 效果裁剪为该大小。
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
/// This is just so that you can copy/paste this and have it run.
void main() => runApp(new MyApp());
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() => MyAppState();
}
class MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new Container(
decoration: new BoxDecoration(
image: new DecorationImage(
image: new NetworkImage(
"https://images.pexels.com/photos/668196/pexels-photo-668196.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260"),
fit: BoxFit.cover)),
child: new Center(
child: new ClipRect(
child: new SizedBox(
height: 200.0,
width: 200.0,
child: new BackdropFilter(
filter: new ui.ImageFilter.blur(
sigmaX: 5.0,
sigmaY: 5.0,
),
child: new Center(
child: new Text("Hi"),
),
),
),
),
),
),
);
}
}
这是非常切题的,但至于为什么文本是黄色并带有下划线,我相信如果您没有指定主题,那是默认设置,但我可能会错。