resolvedStops property
stops when they give one position per colour, otherwise the even spread. The engine refuses any other shape, so this is what reaches it.
Implementation
List<double> get resolvedStops {
if (stops case var s? when s.length == colors.length) return s;
var n = colors.length;
return [for (var i = 0; i < n; i++) n == 1 ? 0.0 : i / (n - 1)];
}