Gradient.radial constructor

Gradient.radial(Offset center, double radius, List<Color> colors, [ List<double> colorStops, TileMode tileMode = TileMode.clamp, Float64List matrix4, Offset focal, double focalRadius = 0.0 ])

Creates a radial gradient centered at center that ends at radius distance from the center.

If colorStops is provided, colorStops[i] is a number from 0.0 to 1.0 that specifies where color[i] begins in the gradient. If colorStops is not provided, then only two stops, at 0.0 and 1.0, are implied (and color must therefore only have two entries).

The behavior before and after the radius is described by the tileMode argument. For details, see the TileMode enum.

If center, radius, colors, or tileMode are null, or if colors or colorStops contain null values, this constructor will throw a NoSuchMethodError.

If matrix4 is provided, the gradient fill will be transformed by the specified 4x4 matrix relative to the local coordinate system. matrix4 must be a column-major matrix packed into a list of 16 values.

If focal is provided and not equal to center and focalRadius is provided and not equal to 0.0, the generated shader will be a two point conical radial gradient, with focal being the center of the focal circle and focalRadius being the radius of that circle. If focal is provided and not equal to center, at least one of the two offsets must not be equal to Offset.zero.

Implementation

Gradient.radial(
  Offset center,
  double radius,
  List<Color> colors, [
  List<double> colorStops,
  TileMode tileMode = TileMode.clamp,
  Float64List matrix4,
  Offset focal,
  double focalRadius = 0.0
]) : assert(_offsetIsValid(center)),
     assert(colors != null),
     assert(tileMode != null),
     assert(matrix4 == null || _matrix4IsValid(matrix4)),
     super._() {
  focalRadius ??= 0.0;
  _validateColorStops(colors, colorStops);
  final Int32List colorsBuffer = _encodeColorList(colors);
  final Float32List colorStopsBuffer = colorStops == null ? null : Float32List.fromList(colorStops);

  // If focal is null or focal radius is null, this should be treated as a regular radial gradient
  // If focal == center and the focal radius is 0.0, it's still a regular radial gradient
  if (focal == null || (focal == center && focalRadius == 0.0)) {
    _constructor();
    _initRadial(center.dx, center.dy, radius, colorsBuffer, colorStopsBuffer, tileMode.index, matrix4);
  } else {
    assert(center != Offset.zero || focal != Offset.zero); // will result in exception(s) in Skia side
    _constructor();
    _initConical(focal.dx, focal.dy, focalRadius, center.dx, center.dy, radius, colorsBuffer, colorStopsBuffer, tileMode.index, matrix4);
  }
}