buildLayer method
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,
),
),
),
),
),
);
}