TKK_E32222567_Gps/lib/app/modules/maps/controllers/maps_controller.dart

66 lines
1.8 KiB
Dart

import 'package:firebase_database/firebase_database.dart';
import 'package:get/get.dart';
import 'package:intl/intl.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:url_launcher/url_launcher.dart';
class MapsController extends GetxController {
final lat = 0.0.obs;
final lng = 0.0.obs;
final lastUpdate = ''.obs;
final database = FirebaseDatabase.instance.ref();
// Tambahkan Rx untuk GoogleMapController agar bisa dipakai di controller
final mapController = Rx<GoogleMapController?>(null);
@override
void onInit() {
super.onInit();
fetchLocation();
}
void fetchLocation() {
database.child('location').onValue.listen((event) async {
final data = event.snapshot.value as Map<dynamic, dynamic>;
lat.value = double.parse(data['lat'].toString());
lng.value = double.parse(data['lon'].toString());
// Jika controller peta sudah ada, pindahkan kamera ke lokasi baru
final controller = mapController.value;
if (controller != null) {
controller.animateCamera(
CameraUpdate.newLatLng(
LatLng(lat.value, lng.value),
),
);
}
// Update waktu lastUpdate
final now = DateTime.now();
final formatted = DateFormat('dd MMM yyyy HH:mm:ss').format(now);
lastUpdate.value = formatted;
});
}
Future<void> openGoogleMaps(double lat, double lon) async {
final url = 'https://www.google.com/maps/search/?api=1&query=$lat,$lon';
final uri = Uri.parse(url);
if (await canLaunchUrl(uri)) {
final success = await launchUrl(
uri,
mode: LaunchMode.externalApplication,
);
if (!success) {
Get.snackbar('Error', 'Gagal membuka Google Maps');
}
} else {
Get.snackbar('Error', 'Aplikasi Maps tidak ditemukan');
}
}
}