feat: add platform channel bridge between Flutter and Android

This commit is contained in:
fiatcode 2026-04-30 11:14:27 +07:00
parent d1b7948723
commit 45da511f87
No known key found for this signature in database
3 changed files with 141 additions and 0 deletions

View 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!;
}
}