文档中的Gradient.radial()不可用?

时间:2019-04-08 10:29:15

标签: dart flutter

我要创建一个渐变着色器。

The Gradient.radial() constructor should return one.

但是,VS Code声称未为Gradient 定义此方法。嗯。

screenshot of the offending lines

现在,您可以从what I've seen online创建一个RadialGradient对象,然后使用.createShader(rect)将其转换为着色器(尚不可用,但是也许我实施错了),但这不是预期的方式,对吧?

更新:

@pskink指出,我使用的是Flutter的较新版本,必须将Gradient shader class作为Dart ui库的一部分导入。

结果代码有效,如下所示:

paint.shader = ui.Gradient.radial(
  Offset(-.5, -.5),
  1, // The radius
  List.from({
    Colors.lightBlueAccent,
    Colors.blue,
    Colors.deepPurpleAccent},
    growable: false
  )
);

不幸的是,它没有渲染任何东西。

这是other Gradient class上使用.createShader()方法的代码的外观。

    RadialGradient _gradient = RadialGradient(
      colors: List.from({
        Colors.lightBlueAccent,
        Colors.blue,
        Colors.deepPurpleAccent},
        growable: false),
    );

    // center is the center of the canvas
    paint.shader = _gradient.createShader(
      Rect.fromCircle(
        center: center,
        radius: size.shortestSide / 2
      )
    );

这有点丑陋的IMO(效率不高?),但是确实提供了预期的结果。

第二次更新:

当“渐变”着色器类中的颜色元素超过2个时,您不能忽略光圈。该信息仅以错误日志的形式显示,这就是为什么我没有看到它的原因。固定不变:两个版本返回不同的结果...

此代码返回此梯度:

@override
  void paint(Canvas canvas, Size size) {
    final center = Offset(size.width / 2, size.height / 2);
    final paint = Paint();

    RadialGradient _gradient = RadialGradient(
       radius: 1,
       center: Alignment(-.5, -.5),
       tileMode: TileMode.clamp,
       colors: List.from({Colors.lightBlueAccent, Colors.blue, Colors.deepPurpleAccent}, growable: false),
       stops: List.from({0.0, 0.5, 1.0}, growable: false),
     );

     paint.shader = _gradient.createShader(
       Rect.fromCircle(
         center: center,
         radius: size.shortestSide / 2
       )
     );

    canvas.drawCircle(center, size.shortestSide / 2, paint);
  }

the first gradient is fucking beautiful

虽然此代码呈现了此渐变:

@override
  void paint(Canvas canvas, Size size) {
    final center = Offset(size.width / 2, size.height / 2);
    final paint = Paint();

    paint.shader = ui.Gradient.radial(
      Offset(-.5, -.5),
      1, // this is the radius
      List.from({Colors.lightBlueAccent, Colors.blue, Colors.deepPurpleAccent},
          growable: false),
      List.from({0.0, 0.5, 1.0}, growable: false),
      TileMode.clamp,
    );

    canvas.drawCircle(center, size.shortestSide / 2, paint);
  }

a purple-grey blob

0 个答案:

没有答案