使用 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中的OverflowBox、SizedOverflowBox,详细介绍
Flutter中的OverflowBox、SizedOverflowBox,详细介绍 在Flutter中,当一个widget的大小超出了其父widget的大小时,通常会发生溢出现象。为了解决这个问题,Flutter提供了两个widget:OverflowBox和SizedOverflowBox。
207 0
|
Dart 开发工具 Android开发
Flutter
Flutter 是 Google 开发的一款开源 UI 工具包,它可以帮助开发者使用一套代码库快速构建美观且高性能的 Android 和 iOS 应用程序。Flutter 具有热重载(Hot Reload)和快速应用程序开发(Rapid Application Development)的特点,使得开发过程更加高效。
153 6
flutter系列之:使用SliverList和SliverGird
在上一篇文章我们讲解SliverAppBar的时候有提到过,Sliver的组件一般都用在CustomScrollView中。除了SliverAppBar之外,我们还可以为CustomScrollView添加List或者Grid来实现更加复杂的组合效果。 今天要向大家介绍的就是SliverList和SliverGird。
flutter系列之:使用SliverList和SliverGird
|
Dart 前端开发 JavaScript
Flutter快速了解
Flutter是Google开发的一套全新的跨平台、开源UI框架,支持iOS、Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件。自从2017年5月发布第一个版本以来,目前Flutter已经发布了近60个版本,并且在2018年5月发布了第一个“Ready for Production Apps”的Beta 3版本,6月20日发布了第一个“Release Preview”版本。
|
监控 JavaScript 前端开发
使用 Flutter Navigator2.0 最舒服的姿势
使用 Flutter Navigator2.0 最舒服的姿势
304 0
使用 Flutter Navigator2.0 最舒服的姿势
|
容器
Flutter | Sliver 系列
Flutter | Sliver 系列
Flutter之 ImageWidger
Flutter之 ImageWidger
176 0
Flutter之 ImageWidger
Flutter之PopupMenuButton
Flutter之PopupMenuButton
316 0