addPolyline method

Future<Polyline> addPolyline(
  1. PolylineOption option
)

添加折线

可配置参数详见PolylineOption

Implementation

Future<Polyline> addPolyline(PolylineOption option) {
  return platform(
    android: (pool) async {
      final map = await androidController.getMap();

      // 构造折线点
      List<com_amap_api_maps_model_LatLng> latLngList = [];
      for (final point in option.latLngList) {
        final latLng =
            await createcom_amap_api_maps_model_LatLng__double__double(
                point.latitude, point.longitude);
        latLngList.add(latLng);
      }

      // 构造折线参数
      final polylineOptions =
          await createcom_amap_api_maps_model_PolylineOptions__();

      // 添加经纬度列表
      await polylineOptions.addAll(latLngList);
      if (option.width != null) {
        await polylineOptions.width(option.width);
      }
      // 颜色
      if (option.strokeColor != null) {
        await polylineOptions
            .color(Int32List.fromList([option.strokeColor.value])[0]);
      }
      // 自定义贴图
      if (option.customTexture != null && option.imageConfig != null) {
        Uint8List iconData =
            await _uri2ImageData(option.imageConfig, option.customTexture);
        final bitmap = await android_graphics_Bitmap.create(iconData);
        final texture = await com_amap_api_maps_model_BitmapDescriptorFactory
            .fromBitmap(bitmap);
        await polylineOptions.setCustomTexture(texture);
        await polylineOptions.setUseTexture(true);

        pool..add(bitmap)..add(texture);
      }
      // 线段始末端样式, 由于两端的枚举顺序是一样的, 所以这里直接从索引获取枚举
      if (option.lineCapType != null) {
        await polylineOptions.lineCapType(
          com_amap_api_maps_model_PolylineOptions_LineCapType
              .values[option.lineCapType.index],
        );
      }
      // 线段连接处样式, 由于两端的枚举顺序是一样的, 所以这里直接从索引获取枚举
      if (option.lineJoinType != null) {
        await polylineOptions.lineJoinType(
            com_amap_api_maps_model_PolylineOptions_LineJoinType
                .values[option.lineJoinType.index]);
      }
      // 是否虚线
      if (option.dashType != null) {
        await polylineOptions.setDottedLine(true);
        switch (option.dashType) {
          case DashType.Square:
            await polylineOptions.setDottedLineType(
                com_amap_api_maps_model_PolylineOptions
                    .DOTTEDLINE_TYPE_SQUARE);
            break;
          case DashType.Circle:
            await polylineOptions.setDottedLineType(
                com_amap_api_maps_model_PolylineOptions
                    .DOTTEDLINE_TYPE_CIRCLE);
            break;
        }
      }
      // 设置参数
      final polyline = await map.addPolyline(polylineOptions);

      pool
        ..add(map)
        ..add(polylineOptions)
        ..addAll(latLngList);

      return Polyline.android(polyline);
    },
    ios: (pool) async {
      await iosController.set_delegate(_iosMapDelegate);

      // 构造折线点
      List<CLLocationCoordinate2D> latLngList = [];
      for (final point in option.latLngList) {
        final latLng = await CLLocationCoordinate2D.create(
            point.latitude, point.longitude);
        latLngList.add(latLng);
      }

      // 构造折线参数
      final polyline = await MAPolyline.polylineWithCoordinatesCount(
          latLngList, latLngList.length);

      // 宽度和颜色需要设置到STACK里去
      if (option.width != null) {
        await pushStackJsonable('width', option.width);
      }
      // 颜色
      if (option.strokeColor != null) {
        await pushStackJsonable('strokeColor', option.strokeColor.value);
      }
      // 设置图片
      if (option.customTexture != null && option.imageConfig != null) {
        Uint8List textureData =
            await _uri2ImageData(option.imageConfig, option.customTexture);

        final texture = await UIImage.create(textureData);

        await pushStack('texture', texture);

        pool..add(texture);
      }
      // 线段始末端样式, 由于两端的枚举顺序是一样的, 所以这里直接从索引获取枚举
      if (option.lineCapType != null) {
        await pushStackJsonable(
          'lineCapType',
          option.lineCapType.index,
        );
      }
      // 线段连接处样式, 由于两端的枚举顺序是一样的, 所以这里直接从索引获取枚举
      if (option.lineJoinType != null) {
        await pushStackJsonable(
          'lineJoinType',
          option.lineJoinType.index,
        );
      }
      // 是否虚线
      if (option.dashType != null) {
        // android端没有None类型, 而ios端还有None类型, 并且索引为0, 这里+1统一一下两端
        // 的值, ios端用起来方便一点, 直接强转成枚举即可.
        await pushStackJsonable('dashType', option.dashType.index + 1);
      }

      // 设置参数
      await iosController.addOverlay(polyline);

      pool..addAll(latLngList);

      return Polyline.ios(polyline, iosController);
    },
  );
}