How to Request Location permission in Flutter | Latest Version | Android Location Enable 2022
Location permission is needed when we want our device to fetch the location of user's device to know the location and perform the required actions or work efficiently.
In Flutter we can implement this using Location Permission and asking user to enable the location permission at run time.
Flutter Packages required are:
1. Geolocator
2. Geocoding
You can find these packages on pub.dev site.
Source code:
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:geocoding/geocoding.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final geolocator =
Geolocator.getCurrentPosition(forceAndroidLocationManager: true);
Position _currentPosition;
String currentAddress = "";
void getCurrentLocation() {
Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high)
.then((Position position) {
setState(() {
_currentPosition = position;
});
getAddressFromLatLng();
}).catchError((e) {
print(e);
});
}
void getAddressFromLatLng() async {
try {
List<Placemark> p = await placemarkFromCoordinates(
_currentPosition.latitude, _currentPosition.longitude);
Placemark place = p[0];
setState(() {
currentAddress =
"${place.thoroughfare},${place.subThoroughfare},${place.name}, ${place.subLocality}";
});
} catch (e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Location"),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
decoration: BoxDecoration(
color: Theme.of(context).canvasColor,
),
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: Column(
children: <Widget>[
Row(
children: <Widget>[
Icon(Icons.location_on),
SizedBox(
width: 8,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
ElevatedButton(
child: Text(
'Get Location',
style: Theme.of(context).textTheme.caption,
),
onPressed: getCurrentLocation,
),
if (_currentPosition != null &&
currentAddress != null)
Text(currentAddress,
style: TextStyle(fontSize: 20.0))
else
Text("Could'nt fetch the location"),
],
),
),
SizedBox(
width: 8,
),
],
),
],
))
],
),
),
);
}
}
Like, Share, and Subscribe to the channel.
Thank You.
Comments
Post a Comment