From 013042827b4eb27ff2e2a2534893ce37e3e01f0e Mon Sep 17 00:00:00 2001 From: fleetimee Date: Sun, 27 Nov 2022 08:14:35 +0700 Subject: [PATCH 1/3] feat: add location --- android/app/src/main/AndroidManifest.xml | 2 + .../home/controllers/home_controller.dart | 66 +++++++++++++++++++ .../home/views/components/home_menu.dart | 37 ++++++++++- macos/Flutter/GeneratedPluginRegistrant.swift | 2 + pubspec.lock | 56 ++++++++++++++++ pubspec.yaml | 2 + .../flutter/generated_plugin_registrant.cc | 3 + windows/flutter/generated_plugins.cmake | 1 + 8 files changed, 168 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index d4b747f1..22b09b84 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -34,4 +34,6 @@ android:value="2" /> + + diff --git a/lib/app/modules/home/controllers/home_controller.dart b/lib/app/modules/home/controllers/home_controller.dart index 82d550d5..999c8c15 100644 --- a/lib/app/modules/home/controllers/home_controller.dart +++ b/lib/app/modules/home/controllers/home_controller.dart @@ -1,11 +1,14 @@ // 🐦 Flutter imports: // 📦 Package imports: +import 'dart:async'; import 'dart:io'; import 'package:akm/app/utils/capitalize.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:faker_dart/faker_dart.dart'; +import 'package:geocoding/geocoding.dart'; +import 'package:geolocator/geolocator.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import 'package:nekos/nekos.dart'; @@ -34,11 +37,74 @@ class HomeController extends GetxController { productName.value = 'Unknown Device'; brandName.value = ''; } + getLocation(); + } + + void onClosed() { + streamSubscription.cancel(); } var productName = ''.obs; var brandName = ''.obs; + var latitude = 'Getting latitude'.obs; + var longtitude = 'Getting longtitude'.obs; + var address = 'Getting address'.obs; + late StreamSubscription streamSubscription; + + void getLocation() async { + /// Determine the current position of the device. + /// + /// When the location services are not enabled or permissions + /// are denied the `Future` will return an error. + bool serviceEnabled; + LocationPermission permission; + + // Test if location services are enabled. + serviceEnabled = await Geolocator.isLocationServiceEnabled(); + if (!serviceEnabled) { + // Location services are not enabled don't continue + // accessing the position and request users of the + // App to enable the location services. + return Future.error('Location services are disabled.'); + } + + permission = await Geolocator.checkPermission(); + if (permission == LocationPermission.denied) { + permission = await Geolocator.requestPermission(); + if (permission == LocationPermission.denied) { + // Permissions are denied, next time you could try + // requesting permissions again (this is also where + // Android's shouldShowRequestPermissionRationale + // returned true. According to Android guidelines + // your App should show an explanatory UI now. + return Future.error('Location permissions are denied'); + } + } + + if (permission == LocationPermission.deniedForever) { + // Permissions are denied forever, handle appropriately. + return Future.error( + 'Location permissions are permanently denied, we cannot request permissions.'); + } + + // When we reach here, permissions are granted and we can + // continue accessing the position of the device. + streamSubscription = + Geolocator.getPositionStream().listen((Position position) { + latitude.value = 'Latitude: ${position.latitude}'; + longtitude.value = 'Longtitude: ${position.longitude}'; + getAddressFromLatlang(position); + }); + } + + Future getAddressFromLatlang(Position position) async { + List placemark = + await placemarkFromCoordinates(position.latitude, position.longitude); + Placemark place = placemark[0]; + address.value = '${place.locality}, ${place.country}'; + } + // void deviceInfo() async { // DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); diff --git a/lib/app/modules/home/views/components/home_menu.dart b/lib/app/modules/home/views/components/home_menu.dart index 9b689b80..d8046cd0 100644 --- a/lib/app/modules/home/views/components/home_menu.dart +++ b/lib/app/modules/home/views/components/home_menu.dart @@ -53,6 +53,41 @@ class HomeMenu extends StatelessWidget { ], ), ), + const SizedBox( + height: 10, + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: Row( + children: [ + Obx(() => controller.address.value == 'Getting address' + ? const SizedBox( + height: 20, + width: 20, + child: CircularProgressIndicator( + color: Colors.white, + ), + ) + : const Icon( + FontAwesomeIcons.mapMarkerAlt, + color: GFColors.DANGER, + )), + const SizedBox( + width: 8, + ), + Obx(() => SizedBox( + width: 400, + child: Text( + controller.address.value, + style: const TextStyle( + color: Colors.white, + fontSize: 20, + ), + ), + )), + ], + ), + ), const SizedBox( height: 20, @@ -75,7 +110,7 @@ class HomeMenu extends StatelessWidget { ), const SizedBox( - height: 60, + height: 40, ), Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 28fbf0eb..320ab1cf 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,12 +6,14 @@ import FlutterMacOS import Foundation import device_info_plus +import geolocator_apple import path_provider_macos import printing import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) + GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 36c4a898..ece23b07 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -517,6 +517,62 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "8.4.0" + geocoding: + dependency: "direct main" + description: + name: geocoding + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + geocoding_platform_interface: + dependency: transitive + description: + name: geocoding_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + geolocator: + dependency: "direct main" + description: + name: geolocator + url: "https://pub.dartlang.org" + source: hosted + version: "9.0.2" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + url: "https://pub.dartlang.org" + source: hosted + version: "4.1.4" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.3" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.7" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.6" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1" get: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index a9d1b6bf..58c2260a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -44,6 +44,8 @@ dependencies: form_builder_extra_fields: ^8.3.0 form_builder_image_picker: ^3.1.0 form_builder_validators: ^8.4.0 + geocoding: ^2.0.5 + geolocator: ^9.0.2 get: 4.6.5 getwidget: ^3.0.1 google_fonts: ^3.0.1 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index ee762274..1c757696 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,10 +6,13 @@ #include "generated_plugin_registrant.h" +#include #include #include void RegisterPlugins(flutter::PluginRegistry* registry) { + GeolocatorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("GeolocatorWindows")); PrintingPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("PrintingPlugin")); UrlLauncherWindowsRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 44aa028a..de1c4c0f 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + geolocator_windows printing url_launcher_windows ) From d82c3e14c5a4eb85843d7703900f3488cfa8b2a5 Mon Sep 17 00:00:00 2001 From: fleetimee Date: Sun, 27 Nov 2022 09:00:18 +0700 Subject: [PATCH 2/3] feat add geolocator dong --- .../home/controllers/home_controller.dart | 2 +- .../controllers/list_agunan_los_controller.dart | 3 +++ .../views/list_agunan_los_view.dart | 16 ++++++++++++++-- .../list_agunan_tanah_controller.dart | 3 +++ .../views/list_agunan_tanah_view.dart | 16 ++++++++++++++-- .../list_agunan_tanah_bangunan_controller.dart | 3 +++ .../views/list_agunan_tanah_bangunan_view.dart | 17 +++++++++++++++-- 7 files changed, 53 insertions(+), 7 deletions(-) diff --git a/lib/app/modules/home/controllers/home_controller.dart b/lib/app/modules/home/controllers/home_controller.dart index 999c8c15..2770f9b7 100644 --- a/lib/app/modules/home/controllers/home_controller.dart +++ b/lib/app/modules/home/controllers/home_controller.dart @@ -102,7 +102,7 @@ class HomeController extends GetxController { List placemark = await placemarkFromCoordinates(position.latitude, position.longitude); Placemark place = placemark[0]; - address.value = '${place.locality}, ${place.country}'; + address.value = '${place.locality}, ${place.administrativeArea}'; } // void deviceInfo() async { diff --git a/lib/app/modules/list_agunan_los/controllers/list_agunan_los_controller.dart b/lib/app/modules/list_agunan_los/controllers/list_agunan_los_controller.dart index bf24be1d..aee1fe9b 100644 --- a/lib/app/modules/list_agunan_los/controllers/list_agunan_los_controller.dart +++ b/lib/app/modules/list_agunan_los/controllers/list_agunan_los_controller.dart @@ -1,4 +1,5 @@ // 🐦 Flutter imports: +import 'package:akm/app/modules/home/controllers/home_controller.dart'; import 'package:flutter/material.dart'; // 📦 Package imports: @@ -20,6 +21,8 @@ class ListAgunanLosController extends GetxController { getAllAgunanLos(agunanId.id); } + final homeController = Get.put(HomeController()); + var listAgunanLos = List.empty(growable: true).obs; final insightDebiturController = Get.put(InsightDebiturController()); diff --git a/lib/app/modules/list_agunan_los/views/list_agunan_los_view.dart b/lib/app/modules/list_agunan_los/views/list_agunan_los_view.dart index b7859f0d..fc6ae5b0 100644 --- a/lib/app/modules/list_agunan_los/views/list_agunan_los_view.dart +++ b/lib/app/modules/list_agunan_los/views/list_agunan_los_view.dart @@ -952,7 +952,13 @@ class FormUpdateAgunanKios extends StatelessWidget { enableDrag: false, builder: (context) { return OpenStreetMapSearchAndPick( - center: LatLong(-7.8013753, 110.3647927), + center: LatLong( + double.parse(controller.homeController.latitude.value + .split(' ')[1]), + double.parse(controller + .homeController.longtitude.value + .split(' ')[1]), + ), buttonColor: primaryColor, buttonText: 'Pilih Lokasi', onPicked: (pickedData) { @@ -1825,7 +1831,13 @@ class FormInputAgunanLos extends StatelessWidget { enableDrag: false, builder: (context) { return OpenStreetMapSearchAndPick( - center: LatLong(-7.8013753, 110.3647927), + center: LatLong( + double.parse(controller.homeController.latitude.value + .split(' ')[1]), + double.parse(controller + .homeController.longtitude.value + .split(' ')[1]), + ), buttonColor: primaryColor, buttonText: 'Pilih Lokasi', onPicked: (pickedData) { diff --git a/lib/app/modules/list_agunan_tanah/controllers/list_agunan_tanah_controller.dart b/lib/app/modules/list_agunan_tanah/controllers/list_agunan_tanah_controller.dart index 4e1a1898..62c47434 100644 --- a/lib/app/modules/list_agunan_tanah/controllers/list_agunan_tanah_controller.dart +++ b/lib/app/modules/list_agunan_tanah/controllers/list_agunan_tanah_controller.dart @@ -1,6 +1,7 @@ // ignore_for_file: unnecessary_overrides // 🐦 Flutter imports: +import 'package:akm/app/modules/home/controllers/home_controller.dart'; import 'package:flutter/material.dart'; // 📦 Package imports: @@ -21,6 +22,8 @@ class ListAgunanTanahController extends GetxController { getAllAgunanTanah(agunanId.id); } + final homeController = Get.put(HomeController()); + var listAgunanTanah = List.empty(growable: true).obs; final isAgunanTanahProcessing = false.obs; diff --git a/lib/app/modules/list_agunan_tanah/views/list_agunan_tanah_view.dart b/lib/app/modules/list_agunan_tanah/views/list_agunan_tanah_view.dart index 35cd56ed..b2c052b5 100644 --- a/lib/app/modules/list_agunan_tanah/views/list_agunan_tanah_view.dart +++ b/lib/app/modules/list_agunan_tanah/views/list_agunan_tanah_view.dart @@ -875,7 +875,13 @@ class FormUpdateAgunanTanah extends StatelessWidget { enableDrag: false, builder: (context) { return OpenStreetMapSearchAndPick( - center: LatLong(-7.8013753, 110.3647927), + center: LatLong( + double.parse(controller.homeController.latitude.value + .split(' ')[1]), + double.parse(controller + .homeController.longtitude.value + .split(' ')[1]), + ), buttonColor: primaryColor, buttonText: 'Pilih Lokasi', onPicked: (pickedData) { @@ -1319,7 +1325,13 @@ class FormInputAgunanTanah extends StatelessWidget { enableDrag: false, builder: (context) { return OpenStreetMapSearchAndPick( - center: LatLong(-7.8013753, 110.3647927), + center: LatLong( + double.parse(controller.homeController.latitude.value + .split(' ')[1]), + double.parse(controller + .homeController.longtitude.value + .split(' ')[1]), + ), buttonColor: primaryColor, buttonText: 'Pilih Lokasi', onPicked: (pickedData) { diff --git a/lib/app/modules/list_agunan_tanah_bangunan/controllers/list_agunan_tanah_bangunan_controller.dart b/lib/app/modules/list_agunan_tanah_bangunan/controllers/list_agunan_tanah_bangunan_controller.dart index 40695fd1..652865f2 100644 --- a/lib/app/modules/list_agunan_tanah_bangunan/controllers/list_agunan_tanah_bangunan_controller.dart +++ b/lib/app/modules/list_agunan_tanah_bangunan/controllers/list_agunan_tanah_bangunan_controller.dart @@ -1,4 +1,5 @@ // 🐦 Flutter imports: +import 'package:akm/app/modules/home/controllers/home_controller.dart'; import 'package:flutter/material.dart'; // 📦 Package imports: @@ -19,6 +20,8 @@ class ListAgunanTanahBangunanController extends GetxController { getAllAgunanTanahBangunan(agunanId.id); } + final homeController = Get.put(HomeController()); + var listAgunanTanahBangunan = List.empty(growable: true).obs; diff --git a/lib/app/modules/list_agunan_tanah_bangunan/views/list_agunan_tanah_bangunan_view.dart b/lib/app/modules/list_agunan_tanah_bangunan/views/list_agunan_tanah_bangunan_view.dart index 36756527..57d8a09a 100644 --- a/lib/app/modules/list_agunan_tanah_bangunan/views/list_agunan_tanah_bangunan_view.dart +++ b/lib/app/modules/list_agunan_tanah_bangunan/views/list_agunan_tanah_bangunan_view.dart @@ -1124,7 +1124,14 @@ class FormUpdateAgunanTanahBangunan extends StatelessWidget { builder: (context) { return SizedBox( child: OpenStreetMapSearchAndPick( - center: LatLong(-7.8013753, 110.3647927), + center: LatLong( + double.parse(controller + .homeController.latitude.value + .split(' ')[1]), + double.parse(controller + .homeController.longtitude.value + .split(' ')[1]), + ), buttonColor: primaryColor, buttonText: 'Pilih Lokasi', onPicked: (pickedData) { @@ -1716,7 +1723,13 @@ class FormInputAgunanTanahBangunan extends StatelessWidget { enableDrag: false, builder: (context) { return OpenStreetMapSearchAndPick( - center: LatLong(-7.8013753, 110.3647927), + center: LatLong( + double.parse(controller.homeController.latitude.value + .split(' ')[1]), + double.parse(controller + .homeController.longtitude.value + .split(' ')[1]), + ), buttonColor: primaryColor, buttonText: 'Pilih Lokasi', onPicked: (pickedData) { From 7ce131d9b552c90013b0989bb9fe3b01514c2d5a Mon Sep 17 00:00:00 2001 From: fleetimee Date: Sun, 27 Nov 2022 09:05:18 +0700 Subject: [PATCH 3/3] up version --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 58c2260a..e40d8163 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: akm -version: 1.0.5+12 +version: 1.0.6+13 publish_to: none description: Mobile app untuk Analisis Kredit Mikro built with Flutter and NodeJS. environment: