颤动模糊叠加

时间:2018-08-11 16:48:36

标签: dart flutter

我想创建一个对话框,而不是使它后面的小部件变暗的通常的实质性方法,而是使它们模糊。所以本质上,我想知道是否有一种方法不仅可以模糊图像,而且可以模糊整个应用程序(或其一部分)

5 个答案:

答案 0 :(得分:3)

  

您可以使用BackdropFilter使图像实际模糊并放置   使用下面的代码在上面覆盖白色。这里_value是滑块   使用可以选择的值。对于前。 10.0

@override
  Widget build(BuildContext context) {
    final ThemeData theme = Theme.of(context);
    SystemChrome.setEnabledSystemUIOverlays([]);
    // TODO: implement build
    return new Scaffold(
      resizeToAvoidBottomPadding: false,
      body: new Stack(children: <Widget>[
        new PageView.builder(
          itemBuilder: (context, pos) {
            return new Stack(
               children: <Widget>[
                 new FadeInImage(
                   fit: BoxFit.cover,
                   placeholder: new CachedNetworkImageProvider(
                       widget.CatimgList[pos].thumb_img),
                   image: new CachedNetworkImageProvider(
                       widget.CatimgList[pos].image_large),
                 ),
                new BackdropFilter(
                   filter: new ImageFilter.blur(sigmaX: _value, sigmaY: _value),
                   child: new Container(
                     decoration: new BoxDecoration(
                         color: Colors.white.withOpacity(_value)),
                   ),
                 )
               ],
            );
      );
)

答案 1 :(得分:0)

在BoxDecoration中使用opacity

child: new Container(
    decoration: new BoxDecoration(color: Colors.white.withOpacity(0.0)),
),

答案 2 :(得分:0)

如果您想要实际的模糊效果(而不仅仅是透明覆盖),则可以将BackdropFilter与ImageFilter.blur一起使用。

答案 3 :(得分:0)

对于您而言,我们可以按以下顺序组合这些小部件:class HelpMenuController : UITableViewController { override func viewDidLoad() { super.viewDidLoad() self.splitViewController?.preferredPrimaryColumnWidthFraction= 0.3 self.splitViewController?.maximumPrimaryColumnWidth = 0.3 * UIScreen.main.bounds.width } ... }

Stack > [Widget1ToBlur, Widget2ToBlur,... , Container > BackdropFilter]

This article将为您提供有关BackdropFilter的信息。

答案 4 :(得分:0)

为了让bg全屏模糊,颜色略带灰色(bgColor - Color(0xffbfbfbf)):

class MyOverlay extends StatelessWidget {
@override
Widget build(BuildContext context) {
final blur = 6.0; // 1.0 - very subtle, 9.0 - very strong blur

return Container(
  alignment: Alignment.center,
  color: Theme.of(context).bgColor.withOpacity(0.5),
  child: BackdropFilter(
    filter: ImageFilter.blur(sigmaX: blur, sigmaY: blur),
    child: Container(
      height: double.infinity,
      width: double.infinity,
      padding: EdgeInsets.all(24),
      // example content - centered logo with text below
      child: Center(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Image.asset(
             logo,
              height: 200,
              width: 200,
            ),
            Text(
              TranslationKeys.logoText.tr(),
              textAlign: TextAlign.center,
            ),
          ],
        ),
      ),
    ),
  ),
);

} }