Loading...
Searching...
No Matches
zone_manager_example.dart
Go to the documentation of this file.
1import 'dart:async';
2import 'dart:io';
3import 'package:navigine_sdk/navigine_sdk.dart';
4
9class ZoneManagerExample {
10 NavigineSdk? _sdk;
11 LocationManager? _locationManager;
12 NavigationManager? _navigationManager;
13 ZoneManager? _zoneManager;
14 ZoneListener? _zoneListener;
15
16 ZoneManagerExample() {
17 _initializeSdk();
18 _setupZoneListener();
19 }
20
24 void _initializeSdk() {
25 try {
26 // [dart_NavigineSdk_getInstance]
27 // Get SDK instance
28 _sdk = NavigineSdk.getInstance();
29 // [dart_NavigineSdk_getInstance]
30
31 // [dart_NavigineSdk_setUserHash]
32 // Set user hash
33 _sdk?.setUserHash("USER-HASH-HERE");
34 // [dart_NavigineSdk_setUserHash]
35
36 // [dart_NavigineSdk_setServer]
37 // Set server URL (optional)
38 _sdk?.setServer("https://custom.navigine.com");
39 // [dart_NavigineSdk_setServer]
40
41 // [dart_NavigineSdk_getLocationManager]
42 // Get LocationManager for working with locations
43 _locationManager = _sdk?.getLocationManager();
44 // [dart_NavigineSdk_getLocationManager]
45
46 // [dart_NavigineSdk_getNavigationManager]
47 // Get NavigationManager for working with navigation
48 _navigationManager = _sdk?.getNavigationManager(_locationManager!);
49 // [dart_NavigineSdk_getNavigationManager]
50
51 // [dart_NavigineSdk_getZoneManager]
52 // Get ZoneManager for working with zones
53 _zoneManager = _sdk?.getZoneManager(
54 _locationManager!,
55 _navigationManager!,
56 );
57 // [dart_NavigineSdk_getZoneManager]
58
59 if (_locationManager != null &&
60 _navigationManager != null &&
61 _zoneManager != null) {
62 print(
63 "LocationManager, NavigationManager and ZoneManager successfully initialized",
64 );
65 }
66 } catch (e) {
67 print("Error initializing SDK: $e");
68 }
69 }
70
74 void _setupZoneListener() {
75 _zoneListener = ZoneListener(
76 // [dart_ZoneListener_onZoneEvent]
77 onZoneEvent: (ZoneEvent zoneEvent) {
78 print("Zone event detected");
79 _demonstrateZoneEventUsage(zoneEvent);
80 },
81 // [dart_ZoneListener_onZoneEvent]
82 );
83 }
84
88 void demonstrateZoneManagerMethods() {
89 if (_zoneManager == null) {
90 print("ZoneManager not initialized");
91 return;
92 }
93
94 // [dart_ZoneManager_addZoneListener]
95 // Add zone listener
96 _zoneManager!.addZoneListener(_zoneListener!);
97 print("Added zone listener");
98 // [dart_ZoneManager_addZoneListener]
99
100 // Simulate some time passing for zone events
101 Future.delayed(Duration(seconds: 2), () {
102 // [dart_ZoneManager_removeZoneListener]
103 // Remove zone listener
104 _zoneManager!.removeZoneListener(_zoneListener!);
105 print("Removed zone listener");
106 // [dart_ZoneManager_removeZoneListener]
107 });
108 }
109
113 void _demonstrateZoneEventUsage(ZoneEvent zoneEvent) {
114 if (zoneEvent == null) {
115 print("ZoneEvent is null");
116 return;
117 }
118
119 // [dart_ZoneEvent_getType]
120 // Get event type
121 ZoneEventType type = zoneEvent.type;
122 print("Zone event type: $type");
123 // [dart_ZoneEvent_getType]
124
125 // [dart_ZoneEvent_getLocationId]
126 // Get location ID
127 int locationId = zoneEvent.locationId;
128 print("Zone location ID: $locationId");
129 // [dart_ZoneEvent_getLocationId]
130
131 // [dart_ZoneEvent_getSublocationId]
132 // Get sublocation ID
133 int sublocationId = zoneEvent.sublocationId;
134 print("Zone sublocation ID: $sublocationId");
135 // [dart_ZoneEvent_getSublocationId]
136
137 // [dart_ZoneEvent_getId]
138 // Get zone ID
139 int id = zoneEvent.id;
140 print("Zone ID: $id");
141 // [dart_ZoneEvent_getId]
142
143 // [dart_ZoneEvent_getName]
144 // Get zone name
145 String name = zoneEvent.name;
146 print("Zone name: $name");
147 // [dart_ZoneEvent_getName]
148
149 // [dart_ZoneEvent_getAlias]
150 // Get zone alias
151 String alias = zoneEvent.alias;
152 print("Zone alias: $alias");
153 // [dart_ZoneEvent_getAlias]
154
155 // [dart_ZoneEvent_constructor]
156 // Create new zone event
157 ZoneEvent newZoneEvent = ZoneEvent(
158 ZoneEventType.ENTER,
159 12345,
160 1,
161 100,
162 "Test Zone",
163 "test_zone",
164 );
165 print(
166 "Created new zone event: ${newZoneEvent.name} (${newZoneEvent.alias})",
167 );
168 // [dart_ZoneEvent_constructor]
169 }
170
174 void demonstrateZoneEventTypes() {
175 // [dart_ZoneEventType_values]
176 // Get all zone event type values
177 print("Available zone event types:");
178 print(" - ZoneEventType.ENTER: ${ZoneEventType.ENTER}");
179 print(" - ZoneEventType.EXIT: ${ZoneEventType.EXIT}");
180 // [dart_ZoneEventType_values]
181 }
182
186 Future<void> demonstrateAdvancedZoneFeatures() async {
187 print("=== Advanced Zone Features ===");
188
189 if (_zoneManager == null) {
190 return;
191 }
192
193 // Add multiple listeners
194 ZoneListener listener1 = ZoneListener(
195 onZoneEvent: (ZoneEvent event) {
196 print("Listener 1: Zone event - ${event.name}");
197 },
198 );
199
200 ZoneListener listener2 = ZoneListener(
201 onZoneEvent: (ZoneEvent event) {
202 print("Listener 2: Zone event - ${event.name}");
203 },
204 );
205
206 // [dart_ZoneManager_addZoneListener_2]
207 // Add first zone listener
208 _zoneManager!.addZoneListener(listener1);
209 print("Added first zone listener");
210 // [dart_ZoneManager_addZoneListener_2]
211
212 await Future.delayed(Duration(seconds: 1));
213
214 // [dart_ZoneManager_addZoneListener_3]
215 // Add second zone listener
216 _zoneManager!.addZoneListener(listener2);
217 print("Added second zone listener");
218 // [dart_ZoneManager_addZoneListener_3]
219
220 // Wait for zone events
221 await Future.delayed(Duration(seconds: 3));
222
223 // Remove listeners
224 // [dart_ZoneManager_removeZoneListener_1]
225 // Remove first zone listener
226 _zoneManager!.removeZoneListener(listener1);
227 print("Removed first zone listener");
228 // [dart_ZoneManager_removeZoneListener_1]
229
230 await Future.delayed(Duration(seconds: 1));
231
232 // [dart_ZoneManager_removeZoneListener_2]
233 // Remove second zone listener
234 _zoneManager!.removeZoneListener(listener2);
235 print("Removed second zone listener");
236 // [dart_ZoneManager_removeZoneListener_2]
237 }
238
242 void demonstrateZoneEventSimulation() {
243 print("=== Zone Event Simulation ===");
244
245 // Create different types of zone events
246 List<ZoneEvent> simulatedEvents = [
247 ZoneEvent(
248 ZoneEventType.ENTER,
249 12345,
250 1,
251 100,
252 "Entrance Zone",
253 "entrance",
254 ),
255 ZoneEvent(ZoneEventType.EXIT, 12345, 1, 100, "Entrance Zone", "entrance"),
256 ZoneEvent(
257 ZoneEventType.ENTER,
258 12345,
259 1,
260 101,
261 "Meeting Room",
262 "meeting_room",
263 ),
264 ZoneEvent(ZoneEventType.ENTER, 12345, 1, 102, "Cafeteria", "cafeteria"),
265 ZoneEvent(
266 ZoneEventType.EXIT,
267 12345,
268 1,
269 101,
270 "Meeting Room",
271 "meeting_room",
272 ),
273 ];
274
275 // Simulate zone events
276 for (int i = 0; i < simulatedEvents.length; i++) {
277 Future.delayed(Duration(seconds: i + 1), () {
278 ZoneEvent event = simulatedEvents[i];
279 print(
280 "Simulated zone event: ${event.type} - ${event.name} (${event.alias})",
281 );
282 _demonstrateZoneEventUsage(event);
283 });
284 }
285 }
286
290 void demonstrateZoneListenerManagement() {
291 print("=== Zone Listener Management ===");
292
293 if (_zoneManager == null) {
294 return;
295 }
296
297 // Create a test listener
298 ZoneListener testListener = ZoneListener(
299 onZoneEvent: (ZoneEvent event) {
300 print("Test listener received event: ${event.name}");
301 },
302 );
303
304 // Add listener
305 _zoneManager!.addZoneListener(testListener);
306 print("Added test zone listener");
307
308 // Simulate some time passing
309 Future.delayed(Duration(seconds: 2), () {
310 // Remove listener
311 _zoneManager!.removeZoneListener(testListener);
312 print("Removed test zone listener");
313 });
314 }
315
319 void cleanup() {
320 if (_zoneManager != null && _zoneListener != null) {
321 // [dart_ZoneManager_removeZoneListener_3]
322 // Remove zone listener
323 _zoneManager!.removeZoneListener(_zoneListener!);
324 // [dart_ZoneManager_removeZoneListener_3]
325 }
326 }
327
331 Future<void> runExample() async {
332 print("=== ZoneManager Example ===");
333
334 demonstrateZoneManagerMethods();
335 demonstrateZoneEventTypes();
336 demonstrateZoneListenerManagement();
337 await demonstrateAdvancedZoneFeatures();
338 demonstrateZoneEventSimulation();
339
340 // Wait a bit for zone events
341 await Future.delayed(Duration(seconds: 5));
342
343 cleanup();
344 print("=== Example completed ===");
345 }
346}
347
351Future<void> main() async {
353 await example.runExample();
354}