9class ZoneManagerExample {
11 LocationManager? _locationManager;
12 NavigationManager? _navigationManager;
13 ZoneManager? _zoneManager;
14 ZoneListener? _zoneListener;
16 ZoneManagerExample() {
24 void _initializeSdk() {
28 _sdk = NavigineSdk.getInstance();
33 _sdk?.setUserHash(
"USER-HASH-HERE");
38 _sdk?.setServer(
"https://custom.navigine.com");
43 _locationManager = _sdk?.getLocationManager();
48 _navigationManager = _sdk?.getNavigationManager(_locationManager!);
53 _zoneManager = _sdk?.getZoneManager(
59 if (_locationManager !=
null &&
60 _navigationManager !=
null &&
61 _zoneManager !=
null) {
63 "LocationManager, NavigationManager and ZoneManager successfully initialized",
67 print(
"Error initializing SDK: $e");
74 void _setupZoneListener() {
75 _zoneListener = ZoneListener(
77 onZoneEvent: (ZoneEvent zoneEvent) {
78 print(
"Zone event detected");
79 _demonstrateZoneEventUsage(zoneEvent);
88 void demonstrateZoneManagerMethods() {
89 if (_zoneManager ==
null) {
90 print(
"ZoneManager not initialized");
96 _zoneManager!.addZoneListener(_zoneListener!);
97 print(
"Added zone listener");
101 Future.delayed(Duration(seconds: 2), () {
104 _zoneManager!.removeZoneListener(_zoneListener!);
105 print(
"Removed zone listener");
113 void _demonstrateZoneEventUsage(ZoneEvent zoneEvent) {
114 if (zoneEvent ==
null) {
115 print(
"ZoneEvent is null");
121 ZoneEventType type = zoneEvent.type;
122 print(
"Zone event type: $type");
127 int locationId = zoneEvent.locationId;
128 print(
"Zone location ID: $locationId");
133 int sublocationId = zoneEvent.sublocationId;
134 print(
"Zone sublocation ID: $sublocationId");
139 int id = zoneEvent.id;
140 print(
"Zone ID: $id");
145 String name = zoneEvent.name;
146 print(
"Zone name: $name");
151 String alias = zoneEvent.alias;
152 print(
"Zone alias: $alias");
157 ZoneEvent newZoneEvent = ZoneEvent(
166 "Created new zone event: ${newZoneEvent.name} (${newZoneEvent.alias})",
174 void demonstrateZoneEventTypes() {
177 print(
"Available zone event types:");
178 print(
" - ZoneEventType.ENTER: ${ZoneEventType.ENTER}");
179 print(
" - ZoneEventType.EXIT: ${ZoneEventType.EXIT}");
186 Future<void> demonstrateAdvancedZoneFeatures() async {
187 print(
"=== Advanced Zone Features ===");
189 if (_zoneManager ==
null) {
194 ZoneListener listener1 = ZoneListener(
195 onZoneEvent: (ZoneEvent event) {
196 print(
"Listener 1: Zone event - ${event.name}");
200 ZoneListener listener2 = ZoneListener(
201 onZoneEvent: (ZoneEvent event) {
202 print(
"Listener 2: Zone event - ${event.name}");
208 _zoneManager!.addZoneListener(listener1);
209 print(
"Added first zone listener");
212 await Future.delayed(Duration(seconds: 1));
216 _zoneManager!.addZoneListener(listener2);
217 print(
"Added second zone listener");
221 await Future.delayed(Duration(seconds: 3));
226 _zoneManager!.removeZoneListener(listener1);
227 print(
"Removed first zone listener");
230 await Future.delayed(Duration(seconds: 1));
234 _zoneManager!.removeZoneListener(listener2);
235 print(
"Removed second zone listener");
242 void demonstrateZoneEventSimulation() {
243 print(
"=== Zone Event Simulation ===");
246 List<ZoneEvent> simulatedEvents = [
255 ZoneEvent(ZoneEventType.EXIT, 12345, 1, 100,
"Entrance Zone",
"entrance"),
264 ZoneEvent(ZoneEventType.ENTER, 12345, 1, 102,
"Cafeteria",
"cafeteria"),
276 for (
int i = 0; i < simulatedEvents.length; i++) {
277 Future.delayed(Duration(seconds: i + 1), () {
278 ZoneEvent
event = simulatedEvents[i];
280 "Simulated zone event: ${event.type} - ${event.name} (${event.alias})",
282 _demonstrateZoneEventUsage(event);
290 void demonstrateZoneListenerManagement() {
291 print(
"=== Zone Listener Management ===");
293 if (_zoneManager ==
null) {
298 ZoneListener testListener = ZoneListener(
299 onZoneEvent: (ZoneEvent event) {
300 print(
"Test listener received event: ${event.name}");
305 _zoneManager!.addZoneListener(testListener);
306 print(
"Added test zone listener");
309 Future.delayed(Duration(seconds: 2), () {
311 _zoneManager!.removeZoneListener(testListener);
312 print(
"Removed test zone listener");
320 if (_zoneManager !=
null && _zoneListener !=
null) {
323 _zoneManager!.removeZoneListener(_zoneListener!);
331 Future<void> runExample() async {
332 print(
"=== ZoneManager Example ===");
334 demonstrateZoneManagerMethods();
335 demonstrateZoneEventTypes();
336 demonstrateZoneListenerManagement();
337 await demonstrateAdvancedZoneFeatures();
338 demonstrateZoneEventSimulation();
341 await Future.delayed(Duration(seconds: 5));
344 print(
"=== Example completed ===");