You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					97 lines
				
				3.1 KiB
			
		
		
			
		
	
	
					97 lines
				
				3.1 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								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<LocationPage> createState() => _LocationPageState();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class _LocationPageState extends State<LocationPage> {
							 | 
						||
| 
								 | 
							
								  String? _currentAddress;
							 | 
						||
| 
								 | 
							
								  Position? _currentPosition;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Future<bool> _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<void> _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<void> _getAddressFromLatLng(Position position) async {
							 | 
						||
| 
								 | 
							
								    await placemarkFromCoordinates(
							 | 
						||
| 
								 | 
							
								        _currentPosition!.latitude, _currentPosition!.longitude)
							 | 
						||
| 
								 | 
							
								        .then((List<Placemark> 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"),
							 | 
						||
| 
								 | 
							
								              )
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								          ),
							 | 
						||
| 
								 | 
							
								        ),
							 | 
						||
| 
								 | 
							
								      ),
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |