J'ai besoin de brouiller un widget, par exemple un simple conteneur. Comment est-ce que je le brouille.
new Container(
child: new Text('hello I am here'),
height: 100.0,
width: 100.0,
color: Colors.red,
)
Considérez ci-dessus Container.
5 réponses
Vous pouvez créer une Stack comme:
Premier enfant: ce que vous voulez brouiller (dans votre cas: conteneur)
Deuxième enfant: BackdropFilter
Et dans le deuxième enfant (BackdropFilter), il y a le paramètre child, qui est utilisé pour insérer un widget dans l'arborescence, qui ne sera pas affecté par BackdropFilter.
Dans votre BackdropFilter, définissez le filtre: ImageFilter.blur (5,0, 5,0)
5,0 est la quantité de flou souhaitée.
J'utilise des exemples BackdropFilter
et Position.fill
:
import 'dart:ui' as ui;
Widget buildBlur({@required BuildContext context, @required Widget child}) {
return Stack(
children: <Widget>[
child,
Positioned.fill(
child: BackdropFilter(
filter: ui.ImageFilter.blur(
sigmaX: 1.0,
sigmaY: 1.0,
),
child: Center(
child: XedProgress.indicator(), // replace your widget
),
),
)
],
);
}
Widget de filtre de flou
import 'dart:ui';
import 'package:flutter/material.dart';
class BlurFilter extends StatelessWidget {
final Widget child;
final double sigmaX;
final double sigmaY;
BlurFilter({this.child, this.sigmaX = 5.0, this.sigmaY = 5.0});
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
child,
ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(
sigmaX: sigmaX,
sigmaY: sigmaY,
),
child: Opacity(
opacity: 0.01,
child: child,
),
),
),
],
);
}
}
Usage
import 'package:flutter/material.dart';
import 'package:my_app/widgets/blur_filter.dart';
class WidgetToImage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('blur filter'),
),
body: SingleChildScrollView(
child: Column(
children: <Widget>[
Text('123'),
Text('999'),
BlurFilter(
child: Text('1000'),
),
Text('888'),
],
),
),
);
}
}
Nous avons besoin de 3 choses pour créer un widget flou
- 1. pile
- 2.BackdropFilter
- 3.ImageFilter.blur
Stack( children: <Widget>[ Container(child: Text( "Hello")), // First child BlurryEffect(0.5,0.1,Colors.grey.shade200) // Second Child ], )
Et,
class BlurryEffect extends StatelessWidget {
final double opacity;
final double blurry;
final Color shade;
BlurryEffect(this.opacity,this.blurry,this.shade);
@override Widget build(BuildContext context) {
return Container(
child: ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX:blurry, sigmaY:blurry),
child: Container(
width: double.infinity,
height: double.infinity,
decoration: BoxDecoration(color: shade.withOpacity(opacity)),
),
),
),
);
}
}
Voici un exemple de code:
import 'dart:ui' as ui;
Widget backdropFilterExample(BuildContext context, Widget child) {
return Stack(
fit: StackFit.expand,
children: <Widget>[
child,
BackdropFilter(
filter: ui.ImageFilter.blur(
sigmaX: 8.0,
sigmaY: 8.0,
),
child: Container(
color: Colors.transparent,
),
)
],
);
}
Google propose également un exemple de code sur:
https://api.flutter.dev/flutter/widgets/BackdropFilter-class.html
Questions connexes
De nouvelles questions
dart
Dart est un langage de programmation basé sur des classes, de type statique (et fortement) pour la création d'applications Web et mobiles. Dart se compile en JavaScript moderne pour s'exécuter dans le navigateur et se compile en code natif pour s'exécuter sur des plateformes mobiles comme Android et iOS. Dart s'exécute également sur la ligne de commande pour les scripts et les applications côté serveur.