step 7 : presensi selfie get address and coordinate fix

This commit is contained in:
sindhu
2024-08-26 12:39:53 +07:00
parent 62409f9feb
commit f85afe7103
11 changed files with 430 additions and 234 deletions

View File

@@ -1,12 +1,15 @@
import 'package:absensi_sas/app/constant.dart';
import 'package:absensi_sas/provider/current_rekap_kehadiran_home_provider.dart';
import 'package:dart_nominatim/dart_nominatim.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';
// import 'package:geocoding/geocoding.dart';
// import 'package:geolocator/geolocator.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:latlong2/latlong.dart';
import 'package:location/location.dart';
// import 'package:permission_handler/permission_handler.dart';
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
import '../../app/route.dart';
@@ -42,6 +45,8 @@ class HomeScreen extends HookConsumerWidget {
// ref.watch(currentUserGoogleProvider);
final googleSignIn = ref.watch(googleSignInProvider);
Location location = new Location();
LocationData _locationData;
useEffect(() {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
@@ -95,9 +100,10 @@ class HomeScreen extends HookConsumerWidget {
try {
isLoadingProsesCheckDistance.value = true;
// Mendapatkan posisi pengguna
LocationPermission permission = await Geolocator.requestPermission();
// LocationPermission permission = await Geolocator.requestPermission();
final permission = await location.hasPermission();
if (permission == LocationPermission.denied) {
if (permission == PermissionStatus.denied) {
isLoadingProsesCheckDistance.value = false;
SanckbarWidget(context, 'Izin lokasi ditolak', snackbarType.error);
// Handle jika pengguna menolak izin lokasi
@@ -105,25 +111,29 @@ class HomeScreen extends HookConsumerWidget {
return;
}
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
// Position position = await Geolocator.getCurrentPosition(
// desiredAccuracy: LocationAccuracy.high);
location.changeSettings(
accuracy: LocationAccuracy.high,
interval: 1000,
distanceFilter: 5,
);
_locationData = await location.getLocation();
// positionLatitude.value = position.latitude.toString();
// positionLongitude.value = position.longitude.toString();
positionLatitude.value = _locationData.latitude.toString();
positionLongitude.value = _locationData.longitude.toString();
// Mendapatkan alamat dari posisi
List<Placemark> placemarks = await placemarkFromCoordinates(
position.latitude, position.longitude);
final address = await positionToAddress(
LatLng(_locationData.latitude!, _locationData.longitude!));
if (placemarks.isNotEmpty) {
isLoadingProsesCheckDistance.value = false;
Placemark placemark = placemarks.first;
// String address =
// "${placemark.thoroughfare}, ${placemark.locality}, ${placemark.administrativeArea}, ${placemark.country},";
String address =
"${placemark.street}, ${placemark.subLocality}, ${placemark.subAdministrativeArea}, ${placemark.postalCode}";
print("Alamat: $address");
positionLatitude.value = position.latitude.toString();
positionLongitude.value = position.longitude.toString();
if (address.city != "") {
positionLatitude.value = _locationData.latitude.toString();
positionLongitude.value = _locationData.longitude.toString();
// panggil check distance provider
ref.read(checkDistanceProvider.notifier).checkDistance(
@@ -146,10 +156,12 @@ class HomeScreen extends HookConsumerWidget {
}
Future<void> requestLocationPermission() async {
var status = await Permission.location.request();
// var status = await Permission.location.request();
final status = await location.serviceEnabled();
isLoadingProsesCheckDistance.value = true;
if (status.isGranted) {
if (status) {
// Izin diberikan, lanjutkan dengan mendapatkan lokasi
// print('izin diberikan');
getAddressFromLocation();
} else {
isLoadingProsesCheckDistance.value = false;

View File

@@ -1,7 +1,7 @@
import 'package:absensi_sas/app/constant.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:geocoding/geocoding.dart';
// import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
@@ -89,39 +89,39 @@ class HomeScreenV1 extends HookConsumerWidget {
return;
}
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
// Position position = await Geolocator.getCurrentPosition(
// desiredAccuracy: LocationAccuracy.high);
// Mendapatkan alamat dari posisi
List<Placemark> placemarks = await placemarkFromCoordinates(
position.latitude, position.longitude);
// // Mendapatkan alamat dari posisi
// List<Placemark> placemarks = await placemarkFromCoordinates(
// position.latitude, position.longitude);
if (placemarks.isNotEmpty) {
isLoadingProsesCheckDistance.value = false;
Placemark placemark = placemarks.first;
// String address =
// "${placemark.thoroughfare}, ${placemark.locality}, ${placemark.administrativeArea}, ${placemark.country},";
// if (placemarks.isNotEmpty) {
// isLoadingProsesCheckDistance.value = false;
// Placemark placemark = placemarks.first;
// // String address =
// // "${placemark.thoroughfare}, ${placemark.locality}, ${placemark.administrativeArea}, ${placemark.country},";
String address =
"${placemark.street}, ${placemark.subLocality}, ${placemark.subAdministrativeArea}, ${placemark.postalCode}";
print("Alamat: $address");
// String address =
// "${placemark.street}, ${placemark.subLocality}, ${placemark.subAdministrativeArea}, ${placemark.postalCode}";
// print("Alamat: $address");
positionLatitude.value = position.latitude.toString();
positionLongitude.value = position.longitude.toString();
// positionLatitude.value = position.latitude.toString();
// positionLongitude.value = position.longitude.toString();
// panggil check distance provider
ref.read(checkDistanceProvider.notifier).checkDistance(
selectedUser?.model.staffId ?? "",
selectedUser?.model.companyId ?? "",
positionLatitude.value,
positionLongitude.value,
);
} else {
isLoadingProsesCheckDistance.value = false;
SanckbarWidget(
context, 'Tidak dapat menemukan alamat.', snackbarType.error);
print("Tidak dapat menemukan alamat.");
}
// // panggil check distance provider
// ref.read(checkDistanceProvider.notifier).checkDistance(
// selectedUser?.model.staffId ?? "",
// selectedUser?.model.companyId ?? "",
// positionLatitude.value,
// positionLongitude.value,
// );
// } else {
// isLoadingProsesCheckDistance.value = false;
// SanckbarWidget(
// context, 'Tidak dapat menemukan alamat.', snackbarType.error);
// print("Tidak dapat menemukan alamat.");
// }
} catch (e) {
print("Error: $e");
isLoadingProsesCheckDistance.value = false;