buildLayer method

  1. @override
Widget buildLayer(
  1. BuildContext context,
  2. MapState map
)
override

override this function for every map layers

Implementation

@override
Widget buildLayer(BuildContext context, MapState map) {
  final zoom = map.zoom.round();
  final center = map.center;
  final distance = scale[math.max(0, math.min(20, zoom + 2))].toDouble();
  final target = map.controller.destination(distance, 90);
  final centerPoint = map.project(center);
  final targetPoint = map.project(target);

  final scaleWidth = targetPoint.x - centerPoint.x;
  final distanceStr = distance > 999
      ? '${(distance / 1000).toStringAsFixed(0)} km'
      : '${distance.toStringAsFixed(0)} m';

  final double viewTop = MediaQuery.of(context).viewPadding.top;
  final EdgeInsets margin =
      this.margin ?? EdgeInsets.only(top: viewTop + 12, left: 15);

  return Positioned.fill(
    child: Align(
      alignment: alignment,
      child: Container(
        margin: margin,
        child: Opacity(
          opacity: opacity,
          child: CustomPaint(
            painter: ScalePainter(
              text: distanceStr,
              scaleWidth: scaleWidth,
              textStyle: TextStyle(color: color, fontSize: fontSize),
              strokeColor: color,
              strokeWidth: strokeWidth,
            ),
          ),
        ),
      ),
    ),
  );
}