drawPath static method

dynamic drawPath(
  1. dynamic canvas,
  2. dynamic path,
  3. dynamic paint,
  4. dynamic pathList,
  5. dynamic property,
)

Implementation

static drawPath(canvas, path, paint, pathList, property) {
  if (pathList == null || pathList.isEmpty) {
    return;
  }
  path.reset();
  int i = 0, il = pathList.length;
  for (; i < il; i++) {
    var d = pathList[i];
    if (d[0] == 'moveTo') {
      //移动到某个点
      path.moveTo(d[1][0], d[1][1]);
    } else if (d[0] == 'lineTo') {
      path.lineTo(d[1][0], d[1][1]);
    }
  }
  if (property['close'] == true) {
    path.close(); //是否闭合路径
  }
  if (property.containsKey('gradient') &&
      property['gradient'] &&
      property.containsKey('shaderId') &&
      property['shaderId'] != '') {
    String shaderId = property['shaderId'];
    if (property['gradientType'] == 'LinearGradient') {
      //线性渐变
      if (shaderMap[shaderId] == null) {
        shaderMap[shaderId] = LinearGradient(
          begin: FractionalOffset(0.5, 0),
          end: FractionalOffset(0.5, 1.0),
          colors: property['gradientColors']!,
        ).createShader(Rect.fromLTWH(
            property['gradientSize'][0],
            property['gradientSize'][1],
            property['gradientSize'][2],
            property['gradientSize'][3]));
      }
      paint.shader = shaderMap[shaderId];
    } else if (property['gradientType'] == 'RadialGradient') {
      //放射渐变
      if (shaderMap[shaderId] == null) {
        shaderMap[shaderId] = RadialGradient(
          center: property['gradientCenter'],
          radius: property['gradientRadius'],
          colors: property['gradientColors'],
        ).createShader(Rect.fromLTWH(
            property['gradientSize'][0],
            property['gradientSize'][1],
            property['gradientSize'][2],
            property['gradientSize'][3]));
      }
      paint.shader = shaderMap[shaderId];
    } else if (property['gradientType'] == 'SweepGradient') {
      // 扇形渐变
      if (shaderMap[shaderId] == null) {
        shaderMap[shaderId] = SweepGradient(
          center: property['gradientCenter'], // 渐变中心点
          startAngle: property['gradientStartAngle'], // 起始角度(弧度制)
          endAngle: property['gradientEndAngle'], // 结束角度(π弧度,即180度)
          colors: property['gradientColors'],
          stops: property['gradientStops'], // 颜色分布位置(可选)
        ).createShader(Rect.fromLTWH(
            property['gradientSize'][0],
            property['gradientSize'][1],
            property['gradientSize'][2],
            property['gradientSize'][3])); // 定义渐变区域
      }
      paint.shader = shaderMap[shaderId];
    }
  } else {
    paint.shader = null;
  }
  if (!property.containsKey('dottedLine') || !property['dottedLine']) {
    //实线
    canvas.drawPath(path, paint);
  } else {
    // 虚线
    paintDashedPath(canvas, path, paint, property['dottedLineLength'],
        property['dottedLineLength']);
  }
}