使用 Flutter LinearGradient

简介: 使用 Flutter LinearGradient

LinearGradient 是 2D 线性渐变

BoxDecration 使用 LinearGradient

const LinearGradient({
    this.begin = Alignment.centerLeft,
    this.end = Alignment.centerRight,
    required super.colors,
    super.stops,
    this.tileMode = TileMode.clamp,
    super.transform,
  });
复制代码

begin 和 end

begin,end 决定了渐变的起点和终点,是比例值,所以无论应用在多大尺寸的目标上都没有问题。默认是从左到右水平渐变。

BoxDecoration(
   gradient: LinearGradient(
     colors: <Color>[
       Colors.blue,
       Colors.green
     ], 
     tileMode: TileMode.decal,
   ),
 ));
复制代码

image.png

这就是默认的从左到右水平渐变的效果,不指定 begin,end时的默认值。其实 begin end,可以从任意位置开始

LinearGradient(
    begin: Alignment.center,
    colors: <Color>[
      Colors.blue,
      Colors.green
    ], 
    tileMode: TileMode.decal,
  )
复制代码

image.png

这就是起点从中心开始的效果。

tileMode

我们注意到上面的例子中 tileMode: TileMode.decal 这是为了演示起点的效果。如果是默认值TileMode.clamp 效果是这样的,和 web 中的渐变效果一样。

image.png

tileMode 是一个枚举,还有两个值。TileMode.mirror 是镜像。

image.png

TileMode.repeated 是重复。

image.png

除了 decal 是严格只填充起点到终点的空间外,其它三个选项都会按策略填充空白区域。

stops

stops 是用来调整不同色值的临界点的。如果不指定 stops ,所有颜色平均分配位置。

LinearGradient( 
      colors: <Color>[
        Colors.blue,
        Colors.green,
      ], 
      stops: [0.4,0.6],
      tileMode: TileMode.decal,
    )
复制代码

image.png

本例中,本来 stops:[0.0,1.0],现在把蓝与绿色的临界点向右移动 40%,造成 0%-40% 是纯蓝。40%-60% 之间是蓝色与縁色的渐变区域。

Custumpainter 使用 LinearGradient

绘制渐变矩形

image.png

class MyPainter extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    var paint = Paint()
      ..shader = LinearGradient(
        colors: <Color>[
          Colors.blue,
          Colors.green,
        ],
        stops: [0, 1],
        tileMode: TileMode.decal,
      ).createShader(Offset(0, 0) & size);
    canvas.drawRect(Rect.fromLTWH(0, 0, 200, 200), paint);
  }
  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    return false;
  }
}
复制代码

绘制渐变文字

image.png

ShaderMask(
      blendMode: BlendMode.srcATop,
      shaderCallback: (Rect bounds) {
        return LinearGradient(
          colors: <Color>[Colors.green, Colors.red],
          tileMode: TileMode.mirror,
        ).createShader(bounds);
      },
      child: const Text(
        'IAM17 flutter 天天更新'
      ),
)
复制代码

不用 ShaderMask 也可以

Text( 
    'Greetings, planet!', 
     style: TextStyle( 
         fontSize: 40, 
         foreground: Paint() 
         ..shader = ui.Gradient.linear( 
             const Offset(0, 20), 
             const Offset(150, 20),
             <Color>[ 
             Colors.red, 
             Colors.yellow,
             ],
            ) 
          ),
 )


目录
相关文章
|
6月前
|
Dart Android开发 开发者
使用Flutter
使用Flutter
36 0
|
6月前
Flutter 之 Stepper
Flutter 之 Stepper Stepper 组件在移动端应用中经常被使用,它可以让用户通过一系列步骤来完成一个复杂的操作。Flutter 中的 Stepper 组件提供了一个简单的方式来实现这个功能。
|
6月前
Flutter中的OverflowBox、SizedOverflowBox,详细介绍
Flutter中的OverflowBox、SizedOverflowBox,详细介绍 在Flutter中,当一个widget的大小超出了其父widget的大小时,通常会发生溢出现象。为了解决这个问题,Flutter提供了两个widget:OverflowBox和SizedOverflowBox。
211 0
|
Dart 开发工具 Android开发
Flutter
Flutter 是 Google 开发的一款开源 UI 工具包,它可以帮助开发者使用一套代码库快速构建美观且高性能的 Android 和 iOS 应用程序。Flutter 具有热重载(Hot Reload)和快速应用程序开发(Rapid Application Development)的特点,使得开发过程更加高效。
154 6
|
监控 JavaScript 前端开发
使用 Flutter Navigator2.0 最舒服的姿势
使用 Flutter Navigator2.0 最舒服的姿势
306 0
使用 Flutter Navigator2.0 最舒服的姿势
|
缓存 开发工具 git
flutter技巧
flutter技巧
|
容器
Flutter | Sliver 系列
Flutter | Sliver 系列
Flutter之 ImageWidger
Flutter之 ImageWidger
177 0
Flutter之 ImageWidger