import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:geocoding/geocoding.dart'; class LocationPage extends StatefulWidget { const LocationPage({Key? key}) : super(key: key); @override State createState() => _LocationPageState(); } class _LocationPageState extends State { String? _currentAddress; Position? _currentPosition; Future _handleLocationPermission() async { bool serviceEnabled; LocationPermission permission; serviceEnabled = await Geolocator.isLocationServiceEnabled(); if (!serviceEnabled) { ScaffoldMessenger.of(context).showSnackBar(const SnackBar( content: Text( 'Location services are disabled. Please enable the services'))); return false; } permission = await Geolocator.checkPermission(); if (permission == LocationPermission.denied) { permission = await Geolocator.requestPermission(); if (permission == LocationPermission.denied) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('Location permissions are denied'))); return false; } } if (permission == LocationPermission.deniedForever) { ScaffoldMessenger.of(context).showSnackBar(const SnackBar( content: Text( 'Location permissions are permanently denied, we cannot request permissions.'))); return false; } return true; } Future _getCurrentPosition() async { final hasPermission = await _handleLocationPermission(); if (!hasPermission) return; await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high) .then((Position position) { setState(() => _currentPosition = position); _getAddressFromLatLng(_currentPosition!); }).catchError((e) { debugPrint(e); }); } Future _getAddressFromLatLng(Position position) async { await placemarkFromCoordinates( _currentPosition!.latitude, _currentPosition!.longitude) .then((List placemarks) { Placemark place = placemarks[0]; _currentAddress = '${place.street}, ${place.subLocality}, ${place.locality}, ${place.postalCode}, ${place.country}'; print(place); setState(() { }); }).catchError((e) { debugPrint(e); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("Location Page")), body: SafeArea( child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('LAT: ${_currentPosition?.latitude ?? ""}'), Text('LNG: ${_currentPosition?.longitude ?? ""}'), Text('ADDRESS: ${_currentAddress ?? ""}'), const SizedBox(height:32), ElevatedButton( onPressed: _getCurrentPosition, child: const Text("Get Current Location"), ) ], ), ), ), ); } }