Widgets

FadeOverlay

简介

FadeOverlay 组件在其子组件上应用渐变淡化效果。这对于创建视觉深度、提高图片上文字的可读性或为 UI 添加风格效果非常有用。

基本用法

FadeOverlay 包裹任何组件以应用渐变淡化:

FadeOverlay(
  child: Image.asset('assets/images/background.jpg'),
)

这会创建一个从顶部透明到底部深色覆盖层的微妙淡化效果。

在图片上叠加文字

Stack(
  children: [
    FadeOverlay(
      child: Image.network(
        'https://example.com/image.jpg',
        fit: BoxFit.cover,
      ),
      strength: 0.5,
    ),
    Positioned(
      bottom: 16,
      left: 16,
      child: Text(
        "Photo Title",
        style: TextStyle(color: Colors.white, fontSize: 24),
      ),
    ),
  ],
)

方向构造函数

FadeOverlay 为常见的淡化方向提供命名构造函数:

FadeOverlay.top

从底部(透明)到顶部(颜色)淡化:

FadeOverlay.top(
  child: Image.asset('assets/header.jpg'),
  strength: 0.3,
)

FadeOverlay.bottom

从顶部(透明)到底部(颜色)淡化:

FadeOverlay.bottom(
  child: Image.asset('assets/card.jpg'),
  strength: 0.4,
)

FadeOverlay.left

从右侧(透明)到左侧(颜色)淡化:

FadeOverlay.left(
  child: Image.asset('assets/banner.jpg'),
  strength: 0.3,
)

FadeOverlay.right

从左侧(透明)到右侧(颜色)淡化:

FadeOverlay.right(
  child: Image.asset('assets/banner.jpg'),
  strength: 0.3,
)

自定义

调整强度

strength 参数控制淡化效果的强度(0.0 到 1.0):

// Subtle fade
FadeOverlay(
  child: myImage,
  strength: 0.1,
)

// Medium fade
FadeOverlay(
  child: myImage,
  strength: 0.5,
)

// Strong fade
FadeOverlay(
  child: myImage,
  strength: 1.0,
)

自定义颜色

更改覆盖层颜色以匹配您的设计:

// Dark blue overlay
FadeOverlay(
  child: Image.asset('assets/photo.jpg'),
  color: Colors.blue.shade900,
  strength: 0.6,
)

// White overlay for light themes
FadeOverlay.bottom(
  child: Image.asset('assets/photo.jpg'),
  color: Colors.white,
  strength: 0.4,
)

自定义渐变方向

对于非标准方向,指定 beginend 对齐方式:

// Diagonal fade (top-left to bottom-right)
FadeOverlay(
  child: Image.asset('assets/photo.jpg'),
  begin: Alignment.topLeft,
  end: Alignment.bottomRight,
  strength: 0.5,
)

// Center outward fade
FadeOverlay(
  child: Image.asset('assets/photo.jpg'),
  begin: Alignment.center,
  end: Alignment.bottomCenter,
  strength: 0.4,
)

参数

参数 类型 默认值 描述
child Widget 必需 应用淡化效果的组件
strength double 0.2 淡化强度(0.0 到 1.0)
color Color Colors.black 淡化覆盖层的颜色
begin AlignmentGeometry Alignment.topCenter 渐变起始对齐
end AlignmentGeometry Alignment.bottomCenter 渐变结束对齐

示例:带淡化效果的卡片

Container(
  height: 200,
  width: double.infinity,
  child: ClipRRect(
    borderRadius: BorderRadius.circular(12),
    child: Stack(
      fit: StackFit.expand,
      children: [
        FadeOverlay.bottom(
          strength: 0.6,
          child: Image.network(
            'https://example.com/product.jpg',
            fit: BoxFit.cover,
          ),
        ),
        Positioned(
          bottom: 16,
          left: 16,
          right: 16,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text(
                "Product Name",
                style: TextStyle(
                  color: Colors.white,
                  fontSize: 18,
                  fontWeight: FontWeight.bold,
                ),
              ),
              Text(
                "\$29.99",
                style: TextStyle(color: Colors.white70),
              ),
            ],
          ),
        ),
      ],
    ),
  ),
)