66 lines
1.8 KiB
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');
|
|
}
|
|
}
|
|
|
|
|
|
}
|