shapeTooltipBuilder property

IndexedWidgetBuilder? shapeTooltipBuilder

Returns a widget for the shape tooltip based on the index.

A shape tooltip displays additional information about the shapes on a map. To show tooltip for the shape, return a widget in MapShapeSublayer.shapeTooltipBuilder. This widget will then be wrapped in the existing tooltip shape which comes with the nose at the bottom.

It is possible to customize the stroke appearance using the MapTooltipSettings.strokeColor and MapTooltipSettings.strokeWidth. To customize the corners, use SfMapsThemeData.tooltipBorderRadius.

The MapShapeSublayer.shapeTooltipBuilder callback will be called when the user interacts with the shapes i.e., while tapping in touch devices and hovering in the mouse enabled devices.

late MapShapeSource _mapSource;
late MapShapeSource _mapSublayerSource;
late List<DataModel> _data;
late MapZoomPanBehavior _zoomPanBehavior;

void initState() {
  _data = <DataModel>[
    DataModel('Orissa', 280, "Low",,
    DataModel('Karnataka', 190, "High",,
    DataModel('Tamil Nadu', 37, "Low", Colors.yellow),

  _mapSource = MapShapeSource.asset("assets/world_map.json",
      shapeDataField: "continent");

  _mapSublayerSource = MapShapeSource.asset("assets/india.json",
      shapeDataField: "name",
      dataCount: _data.length,
      primaryValueMapper: (int index) => _data[index].country,
      shapeColorValueMapper: (int index) => _data[index].color);

  _zoomPanBehavior = MapZoomPanBehavior(
      zoomLevel: 5, focalLatLng: MapLatLng(28.7041, 77.1025));


Widget build(BuildContext context) {
  return Scaffold(
    body: Padding(
      padding: EdgeInsets.all(15),
      child: SfMaps(
        layers: <MapLayer>[
            source: _mapSource,
            zoomPanBehavior: _zoomPanBehavior,
            sublayers: [
                source: _mapSublayerSource,
                shapeTooltipBuilder: (BuildContext context, int index) {
                  if (index == 0) {
                    return Container(
                      child: Icon(Icons.airplanemode_inactive),
                  } else {
                    return Container(
                      child: Icon(Icons.airplanemode_active),

class DataModel {
  const DataModel(,

  final String country;
  final double usersCount;
  final String storage;
  final Color color;


final IndexedWidgetBuilder? shapeTooltipBuilder;