feat: add platform channel bridge between Flutter and Android
This commit is contained in:
parent
d1b7948723
commit
45da511f87
3 changed files with 141 additions and 0 deletions
59
lib/bridge/location_bridge.dart
Normal file
59
lib/bridge/location_bridge.dart
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
import 'dart:async';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class LocationBridge {
|
||||
static const MethodChannel _methodChannel =
|
||||
MethodChannel('com.traccar.client/tracking');
|
||||
static const EventChannel _eventChannel =
|
||||
EventChannel('com.traccar.client/location_updates');
|
||||
|
||||
static Stream<Map<String, dynamic>>? _locationStream;
|
||||
|
||||
static Future<bool> startTracking() async {
|
||||
try {
|
||||
final result = await _methodChannel.invokeMethod<bool>('startTracking');
|
||||
return result ?? false;
|
||||
} on PlatformException catch (e) {
|
||||
print('Failed to start tracking: ${e.message}');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static Future<bool> stopTracking() async {
|
||||
try {
|
||||
final result = await _methodChannel.invokeMethod<bool>('stopTracking');
|
||||
return result ?? false;
|
||||
} on PlatformException catch (e) {
|
||||
print('Failed to stop tracking: ${e.message}');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static Future<bool> updateConfig(Map<String, dynamic> config) async {
|
||||
try {
|
||||
final result =
|
||||
await _methodChannel.invokeMethod<bool>('updateConfig', config);
|
||||
return result ?? false;
|
||||
} on PlatformException catch (e) {
|
||||
print('Failed to update config: ${e.message}');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static Future<Map<String, dynamic>?> getStatus() async {
|
||||
try {
|
||||
final result = await _methodChannel.invokeMethod<Map>('getStatus');
|
||||
return result?.cast<String, dynamic>();
|
||||
} on PlatformException catch (e) {
|
||||
print('Failed to get status: ${e.message}');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
static Stream<Map<String, dynamic>> get locationUpdates {
|
||||
_locationStream ??= _eventChannel
|
||||
.receiveBroadcastStream()
|
||||
.map((event) => Map<String, dynamic>.from(event as Map));
|
||||
return _locationStream!;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue