如何在Flutter中实现“磨砂玻璃”效果?

10 浏览
0 Comments

如何在Flutter中实现“磨砂玻璃”效果?

我正在编写一个Flutter应用程序,我想使用/实现iOS上常见的“毛玻璃”效果。我该如何实现这个效果?

0
0 Comments

如何在Flutter中实现“磨砂玻璃”效果?

问题的出现原因:

在Flutter中,有时候我们需要实现一些特殊的UI效果,比如磨砂玻璃效果。然而,Flutter并没有直接提供实现这个效果的方法,所以我们需要找到一种解决方案来实现这个效果。

解决方法:

在Flutter中,我们可以使用BackdropFilter来实现磨砂玻璃效果。BackdropFilter是一个widget,它可以将子widget模糊化。通过设置BackdropFilter的filter属性为ImageFilter.blur,我们可以实现模糊效果。

具体的代码实现如下:

BackdropFilter(

filter: ImageFilter.blur(sigmaX: _sigmaX, sigmaY: _sigmaY),

child: Container(

color: Colors.black.withOpacity(_opacity),

),

),

在这个代码中,使用BackdropFilter的filter属性将ImageFilter.blur作为参数传入,通过调整sigmaX和sigmaY的值可以控制模糊的程度。然后,将需要添加磨砂玻璃效果的子widget作为BackdropFilter的child。

通过以上的代码,我们可以在Flutter中实现磨砂玻璃效果。这样,我们就可以在应用中创建更加美观的UI界面了。

0
0 Comments

在Flutter中如何实现"糖霜玻璃"效果?

这个问题的原因是提问者对于"Frosted"的确切意义不清楚,所以他在自己的示例中不能正常工作。

解决方法如下:

import 'package:flutter/material.dart';

import 'dart:ui' as ui;

void main() => runApp(

MaterialApp(

title: "Frosted glass",

home: new HomePage()

)

);

class HomePage extends StatelessWidget {

Widget build(BuildContext context) {

return new Scaffold(

body: new Stack(

fit: StackFit.expand,

children: [

generateBluredImage(),

new Column(

mainAxisAlignment: MainAxisAlignment.center,

children: [

rectShapeContainer(),

],

),

],

),

);

}

Widget generateBluredImage() {

return new Container(

decoration: new BoxDecoration(

image: new DecorationImage(

image: new AssetImage('assets/images/huxley-lsd.png'),

fit: BoxFit.cover,

),

),

child: new BackdropFilter(

filter: new ui.ImageFilter.blur(sigmaX: 3.0, sigmaY: 3.0),

child: new Container(

decoration: new BoxDecoration(color: Colors.black.withOpacity(0.2)),

),

),

);

}

Widget rectShapeContainer() {

return Container(

margin: const EdgeInsets.symmetric(horizontal: 40.0, vertical: 10.0),

padding: const EdgeInsets.all(15.0),

decoration: new BoxDecoration(

borderRadius: new BorderRadius.circular(10.0),

shape: BoxShape.rectangle,

color: Colors.black.withOpacity(0.5),

boxShadow: [

new BoxShadow(

color: Colors.black26,

blurRadius: 5.0,

offset: new Offset(5.0, 5.0),

),

],

),

child: new Column(

children: [

new Text(

'There\'s only one corner of the universe you can be certain of improving and that\'s your own self.',

style: new TextStyle(

color: Colors.white,

fontSize: 20.0,

),

),

],

),

);

}

}

这段代码实现了"Frosted glass"效果,包括模糊背景图片和矩形形状的容器。你可以根据需要调整容器的形状、颜色和阴影效果。

0
0 Comments

如何在Flutter中实现“糖霜玻璃”效果?

你可以使用BackdropFilter widget来实现这个效果。

import 'dart:ui';

import 'package:flutter/material.dart';

void main() {

runApp(new MaterialApp(home: new FrostedDemo()));

}

class FrostedDemo extends StatelessWidget {

Widget build(BuildContext context) {

return new Scaffold(

body: new Stack(

children: [

new ConstrainedBox(

constraints: const BoxConstraints.expand(),

child: new FlutterLogo()

),

new Center(

child: new ClipRect(

child: new BackdropFilter(

filter: new ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),

child: new Container(

width: 200.0,

height: 200.0,

decoration: new BoxDecoration(

color: Colors.grey.shade200.withOpacity(0.5)

),

child: new Center(

child: new Text(

'Frosted',

style: Theme.of(context).textTheme.display3

),

),

),

),

),

),

],

),

);

}

}

如何使糖霜效果覆盖整个应用的宽度/高度?

你可以使用Stack。或者,如果你想将糖霜玻璃效果用作对话框的模态屏障,你可以修改ModalBarrier的副本,将BackdropFilter包含进去。

不幸的是,模糊效果在iOS设备上不起作用。

据我所知,上述问题已经解决,模糊效果现在在iOS设备上起作用了。

是否可以为模糊框的角落添加羽化效果?使得模糊区域与屏幕其他部分的过渡是渐进的而不是突然的?

你可以禁用背景小部件(例如Backdrop下的所有按钮等)。ClipRRect可能有助于使角落变得柔和。

值得一提的是,你必须将BackdropFilter包装在ClipRRect中,否则它将模糊整个应用程序。

0