我正在尝试在类似这样的Container小部件上实现模糊效果。
期望:
我尝试通过// Key Store
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(clientKeyStore, clientKeyStorePwd);
// Trust Store
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(serverTrustStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
和BackdropFilter
过滤器来实现,但这没有任何帮助。
代码
ImageFilter.blur
输出:
答案 0 :(得分:3)
以下是制作模糊图像的示例:
Container(
decoration: BoxDecoration(
image: DecorationImage(image: NetworkImage(imgUrl), fit: BoxFit.cover),
),
child: BackdropFilter(
filter: ui.ImageFilter.blur(sigmaX: 4.0, sigmaY: 4.0),
child: Container(
decoration: BoxDecoration(color: Colors.white.withOpacity(0.0)),
),
),
);
关于您的情况
Container(
child: Stack(
children: <Widget>[
Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.red
),
height: 60,
width: 60,
),
Positioned(
left: 15,
top: 15,
child: Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.lightBlue
),
height: 30,
width: 30,
),
),
Container(
child: BackdropFilter(
filter: ui.ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
child: Container(
decoration: BoxDecoration(color: Colors.white.withOpacity(0.0)),
),
),
)
]
),
);
答案 1 :(得分:2)
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
child: Container(
height: 125,
color: Colors.black54,
child: YourWidget()
),
)
答案 2 :(得分:1)
Widgets
没有直接模糊自身的方法(据我所知)。但是您可以使用CustomPainter
来实现。
MaskFilter.blur(BlurStyle.normal,blurSigma)可以将模糊效果添加到您要绘制的任何小部件中。
例如
circle_blur_painter.dart
class CircleBlurPainter extends CustomPainter {
CircleBlurPainter({@required this.circleWidth, this.blurSigma});
double circleWidth;
double blurSigma;
@override
void paint(Canvas canvas, Size size) {
Paint line = new Paint()
..color = Colors.lightBlue
..strokeCap = StrokeCap.round
..style = PaintingStyle.stroke
..strokeWidth = circleWidth
..maskFilter = MaskFilter.blur(BlurStyle.normal, blurSigma);
Offset center = new Offset(size.width / 2, size.height / 2);
double radius = min(size.width / 2, size.height / 2);
canvas.drawCircle(center, radius, line);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
}
您可以将CircleBlurPainter
与具有CustomPaint
属性的 foregroundPainter
小部件一起使用。
blur_widget.dart
class BlurWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CustomPaint(foregroundPainter: CircleBlurPainter(circleWidth: 30, blurSigma: 3.0));
}
}
答案 3 :(得分:1)
Container(
height: 300,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage('your image url'),
fit: BoxFit.cover
),
),
child: ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 2.0, sigmaY: 2.0),
child: Container(
color: Colors.black.withOpacity(0.1),
),
),
),
);
使模糊容器颤动的最佳方法,我正在使用 clipRect 来避免整个屏幕模糊。