The Gradient.radial()
constructor should return one.
但是,VS Code声称未为Gradient
定义此方法。嗯。
现在,您可以从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);
}
虽然此代码呈现了此渐变:
@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);
}