onTap property
Callback to receive tap event for this line.
You can customize the appearance of the tapped line based on the index passed on it as shown in the below code snippet.
late List<Model> _lines;
late MapZoomPanBehavior _zoomPanBehavior;
late MapShapeSource _mapSource;
int _selectedIndex = -1;
@override
void initState() {
_zoomPanBehavior = MapZoomPanBehavior(
focalLatLng: MapLatLng(40.7128, -95.3698),
zoomLevel: 3,
);
_mapSource = MapShapeSource.asset(
"assets/world_map.json",
shapeDataField: "continent",
);
_lines = <Model>[
Model(MapLatLng(40.7128, -74.0060), MapLatLng(44.9778, -93.2650)),
Model(MapLatLng(40.7128, -74.0060), MapLatLng(33.4484, -112.0740)),
Model(MapLatLng(40.7128, -74.0060), MapLatLng(29.7604, -95.3698)),
Model(MapLatLng(40.7128, -74.0060), MapLatLng(39.7392, -104.9903)),
];
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SfMaps(
layers: [
MapShapeLayer(
source: _mapSource,
zoomPanBehavior: _zoomPanBehavior,
sublayers: [
MapLineLayer(
lines: List<MapLine>.generate(
_lines.length,
(int index) {
return MapLine(
from: _lines[index].from,
to: _lines[index].to,
color:
_selectedIndex == index ? Colors.blue
: Colors.red,
onTap: () {
setState(() {
_selectedIndex = index;
});
});
},
).toSet(),
),
],
),
],
),
);
}
class Model {
Model(this.from, this.to);
MapLatLng from;
MapLatLng to;
}
Implementation
final VoidCallback? onTap;