flutter - 在模糊图像上的渐变( flutter )

标签 flutter dart flutter-layout gaussianblur

我想要一种像背景截图那样的第二张截图中的那种设计。因此,模糊背景图像的上半部分已经很好,只有下半部分缺少固定颜色的渐变(例如黑色或白色)。
为了澄清起见:我只希望背景淡化为黑色而不影响顶层(在这种情况下为未触摸的图像)。我已经尝试了很长时间才能找到合适的解决方案,但不幸的是我没有找到任何解决方案。
当前状态:
current state
目标:
goal
当前代码(第一个屏幕截图):

Container(
 color: Colors.white,
 child: Container(
  decoration: BoxDecoration(
    image: DecorationImage(
      image: CachedNetworkImageProvider(widget.storyData.coverURL),
      fit: BoxFit.cover,
    ),
  ),
  child: BackdropFilter(
    filter: ImageFilter.blur(sigmaX: 30, sigmaY: 30),
    child: Container(
      child: Padding(
        padding: const EdgeInsets.all(80.0),
        child: Hero(
          tag: widget.heroTagID,
          child: CachedNetworkImage(
            imageUrl: widget.storyData.coverURL,
            placeholder: (context, url) => Padding(
              padding: EdgeInsets.all(25),
              child: Icon(Ionicons.image_outline),
            ),
          ),
        ),
      ),
    ),
  )),
);

最佳答案

您可以使用StackLinearGradient来实现。
我已经用简单的NetworkImage替换了CachedNetworkImageProvider,以便代码可以在https://dartpad.dev/上工作。原理保持不变:

import 'dart:ui';
import 'package:flutter/material.dart';

final Color darkBlue = Color.fromARGB(255, 18, 32, 47);

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Stack(
      children: <Widget>[
        Container(
          decoration: BoxDecoration(
            image: DecorationImage(
              image: NetworkImage(
                'https://picsum.photos/id/255/1440/3200',
              ),
              fit: BoxFit.cover,
            ),
          ),
        ),
        Container(
          constraints: BoxConstraints.expand(),
          decoration: BoxDecoration(
              color: Colors.white,
              gradient: LinearGradient(
                  begin: FractionalOffset.topCenter,
                  end: FractionalOffset.bottomCenter,
                  colors: [Colors.black.withOpacity(0.0), Colors.black],
                  stops: [0.0, 1.0]
              )
          ),
        ),
        BackdropFilter(
            filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),
            child: Center(
              child: Padding(
                padding: const EdgeInsets.all(80.0),
                child: Hero(
                    tag: 'heroTag',
                    child: Image.network(
                      'https://picsum.photos/id/255/1440/3200',
                    )
                ),
              ),
            )
        ),
      ],
    );
  }
}
您可以调整颜色,然后停下来以得到您想要的颜色。
最终结果:
end_result_image

关于flutter - 在模糊图像上的渐变( flutter ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63864390/

相关文章:

flutter - 在Dart中解析URI片段

flutter - Flutter-在底部将FlatButton按下

dart - 如何在 Dart Polymer 中使用和迭代可观察 map ?

dart - mulFromInteger 在 null 时被调用

flutter - 是什么导致问题线程 1 : EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=650 MB, 未使用=0x0)?

Flutter DraggableScrollableSheet 在按下按钮时不显示

flutter - 如何等待功能完成?

flutter - Flutter:如何在CustomPainter对象中设置动态颜色

flutter - 如何在 just_audio 中扩展后流式传输带有额外信息的 mp3 文件

flutter - 为什么此初始屏幕代码无法正常运行?