Мне нравится эффект размытого мороза с использованием BackdropFilter (см. this ).
Однако, поскольку BackdropFilter имеет Opacity, а также потому, что размываемый виджет также имеет Opacity, производительностьужасноЭто также потому, что я перерисовываю свои виджеты несколько раз в секунду, но это не должно быть проблемой, учитывая, что Flutter может работать со скоростью 60 кадров в секунду?
Я включил checkerboardOffscreenLayers и вижу шахматы для миль.: O Шахматные доски происходят из-за blurScreen
, а не из-за widgetToBlur
, но widgetToBlur
замедляет производительность, вероятно, потому что (в моем реальном коде, а не в этом примере) он вызывает setState () несколько раз в секунду.
Есть ли более эффективный способ сделать размытие / помутнение?Ссылка выше говорит, чтобы применить прозрачность к виджетам индивидуально.Я не могу сделать это с размытием (blurScreen
ниже), потому что BackdropFilter должен быть размещен поверх моего виджета, который делает перерисовку.Я убрал эффект размытия, и моя производительность стала намного лучше (без шахматных досок, приложение не падает).
build () рассматриваемый код:
final widgetToBlur = Container(
child: Opacity(
opacity: 0.3,
// In my actual code, this is a Stateful widget.
child: Text('Spooky blurry semi-transparent text!'),
),
);
final blurScreen = BackdropFilter(
filter: ImageFilter.blur(sigmaX: 3.0, sigmaY: 3.0),
child: Container(
decoration: BoxDecoration(
color: _backgroundColor.withOpacity(0.3),
),
),
);
return Container(
child: Stack(
children: <Widget>[
widgetToBlur,
blurScreen,
Text('This is in front of the blurred background'),
],
),
);