Untitled
user_6232722
plain_text
a year ago
2.6 kB
10
Indexable
import 'dart:developer';
import 'package:google_maps_cluster_manager/google_maps_cluster_manager.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart'
hide ClusterManager, Cluster;
import 'package:lmc_user_app/features/home/bloc/home_bloc.dart';
import 'package:lmc_user_app/features/home/data/model/place_model.dart';
import '../../../bloc/home_state.dart';
import 'map_controller.dart';
import 'map_marker.dart';
class MapPage extends StatefulWidget {
const MapPage({super.key});
@override
_MapPageState createState() => _MapPageState();
}
class _MapPageState extends State<MapPage> {
Set<Marker> markers = {};
List<PlaceModel> placeList = [];
late ClusterManager clusterManager;
InteractiveMapsController controller = InteractiveMapsController();
void _updateMarkers(Set<Marker> markers) {
setState(() {
this.markers = markers;
});
}
Future<Marker> Function(dynamic) get markerBuilder => (cluster) async {
return Marker(
markerId: MarkerId(cluster.isMultiple
? cluster.getId()
: cluster.items.single.id.toString()),
position: cluster.location,
);
};
ClusterManager _initClusterManager() {
return ClusterManager<PlaceModel>(placeList, _updateMarkers,
markerBuilder: markerBuilder);
}
@override
void initState() {
clusterManager = _initClusterManager();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocConsumer<HomeBusinessFetchBloc, HomeBusinessFetchState>(
listener: (context, state) {
log("123qwe${state.toString()}");
if (state is HomeBusinessFetchLoaded) {
setState(() {
placeList = state.businesses.map((e) {
return PlaceModel(
id: e.id,
latLng: LatLng(e.latitude ?? 0.0, e.longitude ?? 0.0));
}).toList();
});
}
},
builder: (context, state) {
log(markers.length.toString());
if (state is HomeBusinessFetchLoading) {
return const Center(child: CircularProgressIndicator());
}
return InteractiveMapsMarker(
markers: markers,
controller: controller,
center: const LatLng(27.677433, 85.318545),
zoom: 14,
onLastItem: () {
print('Last Item');
},
);
},
),
);
}
}
Editor is loading...
Leave a Comment