The “frosted glass” effect is a visual design element that resembles a frosted glass surface, often used to create a soft and subtle background for text or images. In Flutter, you can achieve this effect using the BackdropFilter
widget.
A Simple Example
Let’s start with a simple example of how to use the BackdropFilter
widget to create a frosted glass effect:
import 'dart:ui'; import 'package:flutter/material.dart'; void main() { runApp(new MaterialApp(home: new FrostedDemo())); } class FrostedDemo extends StatelessWidget { @override Widget build(BuildContext context) { return new Scaffold( body: new Stack( children: <Widget>[ 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 ), ), ), ), ), ), ], ), ); } }
In this example, we’re using the BackdropFilter
widget to apply a blur effect to a container with a grey background and white text. The sigmaX
and sigmaY
properties are used to control the amount of blur applied.
A More Complex Example
Here’s an example that creates a more complex frosted glass effect, using a background image and a text overlay:
import 'package:flutter/material.dart'; import 'dart:ui' as ui; void main() => runApp( MaterialApp( title: "Frosted glass", home: new HomePage() ) ); class HomePage extends StatelessWidget { @override Widget build(BuildContext context) { return new Scaffold( body: new Stack( fit: StackFit.expand, children: <Widget>[ generateBluredImage(), new Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ rectShapeContainer(), ], ), ], ), ); } Widget generateBluredImage() { return new Container( decoration: new BoxDecoration( image: new DecorationImage( image: new AssetImage('assets/images/huxley-lsd.png'), fit: BoxFit.cover, ), ), //I blured the parent container to blur background image, you can get rid of this part child: new BackdropFilter( filter: new ui.ImageFilter.blur(sigmaX: 3.0, sigmaY: 3.0), child: new Container( //you can change opacity with color here(I used black) for background. 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( //you can get rid of below line also borderRadius: new BorderRadius.circular(10.0), //below line is for rectangular shape shape: BoxShape.rectangle, //you can change opacity with color here(I used black) for rect color: Colors.black.withOpacity(0.5), //I added some shadow, but you can remove boxShadow also. boxShadow: <BoxShadow>[ new BoxShadow( color: Colors.black26, blurRadius: 5.0, offset: new Offset(5.0, 5.0), ), ], ), child: new Column( children: <Widget>[ 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, ), ), ], ), ); } }
In this example, we’re using a background image with a blur effect applied to it, and a text overlay with a rectangular shape and shadow.
Conclusion
The BackdropFilter
widget is a powerful tool for creating visual effects in Flutter. By applying a blur filter to a container or image, you can create a frosted glass effect that adds depth and interest to your UI. Whether you’re building a simple app or a complex one, the BackdropFilter
widget is definitely worth checking out.