TIF_E41211491/lib/app/modules/maps/views/maps_view.dart

223 lines
9.0 KiB
Dart

import 'package:dikantin/app/modules/profile/controllers/profile_controller.dart';
import 'package:dropdown_search/dropdown_search.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import '../../../data/models/unit_model.dart';
import '../../order/controllers/order_controller.dart';
import '../controllers/maps_controller.dart';
class MapsView extends GetView<MapsController> {
MapsView({
Key? key,
required this.selectedBuilding,
required this.keterangan,
required this.initialSelectedValue,
}) : super(key: key) {
controllerMaps.selectedBuilding = selectedBuilding;
controllerMaps.keteranganController.text = keterangan;
}
final MapsController controllerMaps = Get.put(MapsController());
final ProfileController profilC = Get.find<ProfileController>();
final OrderController orderC = Get.find<OrderController>();
final String selectedBuilding;
final String keterangan;
final String initialSelectedValue;
@override
Widget build(BuildContext context) {
return MediaQuery(
data: MediaQuery.of(context).copyWith(
textScaleFactor:
MediaQuery.of(context).textScaleFactor.clamp(1.0, 1.15)),
child: Scaffold(
appBar: AppBar(
title: Text('Pilih Lokasi'),
),
body: Column(
children: [
Expanded(
child: Stack(children: [
Obx(
() => GoogleMap(
onMapCreated: (controller) {
controllerMaps.mapController = controller;
controllerMaps.addPolygon();
},
mapType: MapType.hybrid,
initialCameraPosition: CameraPosition(
target: LatLng(-8.15794, 113.72380),
zoom: 18.0,
),
markers: Set<Marker>.from(controllerMaps.markers.toList()),
polygons: controllerMaps.polygons,
),
),
Positioned(
bottom: 30,
left: 20,
child: Align(
alignment: Alignment.bottomLeft,
child: IconButton(
onPressed: () async {
await controllerMaps.determinePosition();
await controllerMaps.getCurrentLocation();
},
icon: const Icon(
Icons.my_location,
size: 30.0,
color: Colors.white,
),
),
),
),
Positioned(
bottom: 30,
left: 60,
child: Align(
alignment: Alignment.bottomLeft,
child: IconButton(
onPressed: () async {
controllerMaps.goToKampus();
//orderC.getUnit();
},
icon: const Icon(
Icons.school_rounded,
size: 30.0,
color: Colors.white,
),
),
),
),
]),
),
Container(
padding: EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Obx(
() => DropdownSearch<String>(
popupProps: PopupProps.modalBottomSheet(
showSelectedItems: true,
disabledItemFn: (String s) => s.startsWith('I'),
),
items: orderC.unit.value.data
?.map((data) => data?.namaGedung ?? "")
.toList() ??
[],
dropdownDecoratorProps: DropDownDecoratorProps(
dropdownSearchDecoration: InputDecoration(
labelText: "Pilih Gedung",
hintText: "Pilih gedung dari daftar",
),
),
onChanged: (String? selectedValue) {
if (selectedValue != null) {
// Dapatkan data gedung yang sesuai dari sumber daya data
var selectedData = orderC.unit.value.data?.firstWhere(
(data) => data?.namaGedung == selectedValue,
);
// Cetak latitude dan longitude jika data ditemukan
if (selectedData is Data) {
print(
'Latitude: ${selectedData.lattitude}, Longitude: ${selectedData.longtitude}',
);
controllerMaps.placeMarker(
double.parse(selectedData.lattitude.toString()),
double.parse(selectedData.longtitude.toString()),
);
controllerMaps.selectedBuilding = selectedValue;
controllerMaps.selectedLatitude =
double.parse(selectedData.lattitude.toString());
controllerMaps.selectedLongitude = double.parse(
selectedData.longtitude.toString());
} else {
print('Data not found');
}
}
},
selectedItem: orderC.unit.value.data?.isNotEmpty == true
? profilC.profile.value.data?.alamat != ''
? profilC.profile.value.data?.alamat
: orderC.unit.value.data!.first?.namaGedung
: 'pilih Gedung',
),
),
TextField(
controller: controllerMaps.keteranganController
..text = profilC.profile.value.data?.ket ?? "",
decoration: InputDecoration(
labelText: 'Keterangan',
hintText: "Cth: Taruh di satpam"),
),
SizedBox(height: 16.0),
ElevatedButton(
onPressed: () async {
// Pengecekan apakah keterangan tidak diisi
await EasyLoading.show(
status: 'loading...',
maskType: EasyLoadingMaskType.black,
);
bool isLocationEnabled =
await controllerMaps.isLocationServiceEnabled();
if (!isLocationEnabled) {
EasyLoading.dismiss();
Get.snackbar(
'Peringatan',
'Mohon aktifkan layanan lokasi pada perangkat Anda',
backgroundColor: Colors.red,
colorText: Colors.white,
);
return;
}
if (controllerMaps.keteranganController.text.isEmpty) {
EasyLoading.dismiss();
Get.snackbar(
'Peringatan',
'Mohon isi keterangan',
backgroundColor: Colors.red,
colorText: Colors.white,
);
} else {
profilC.editAlamat(
alamat: controllerMaps
.selectedBuilding, // Gunakan nama gedung
lat: controllerMaps.selectedLatitude
.toString(), // Gunakan latitude
long: controllerMaps.selectedLongitude
.toString(), // Gunakan longitude
ket: controllerMaps.keteranganController.text);
await controllerMaps.determinePosition();
EasyLoading.dismiss();
print('EasyLoading dismiss');
Get.back();
Get.snackbar(
'Perhatian',
'Alamat Berhasil Diubah',
snackPosition: SnackPosition
.TOP, // Menampilkan Snackbar dari atas
duration: Duration(seconds: 1),
);
}
},
child: Text('Simpan'),
),
],
),
),
],
),
),
);
}
}