Geolocalizzazione in Flutter con geolocator
In Flutter abbiamo il package geolocator che ci consente di geolocalizzare il dispositivo.
In questo articolo vediamo un esempio di utilizzo; io l'ho testato solo su Anrdoid, quindi vi indico cosa aggiungere come permessi su questo OS.
Sulla pagina ufficiale ci sono comunque le istruzioni per tutti gli altri.
Prima di tutto installiamo il package:
flutter pub add geolocator
Poi aprite l'AndroidManifest.xml ed aggiungete i permessi:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
Questa invece la schermata:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<Position> _getPosition() async {
bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
return Future.error('Servizio di localizzazione disabilitato');
}
LocationPermission permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
return Future.error('Permessi negati');
}
}
if (permission == LocationPermission.deniedForever) {
return Future.error(
'I permessi di localizzazione sono negati in maniera permanente',
);
}
return await Geolocator.getCurrentPosition();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: FutureBuilder(
future: _getPosition(),
builder: (BuildContext context, AsyncSnapshot<Position> snapshot) {
if (snapshot.hasData) {
return Center(
child: Text(
'Location:nLatitudine: ${snapshot.data!.latitude}, Longitudine: ${snapshot.data!.longitude}',
),
);
} else if (snapshot.hasError) {
return Text('Errore: ${snapshot.error}');
}
return CircularProgressIndicator();
},
),
);
}
}
In faeso di avvio verrà mostrata la schermata in cui dovete accettare i permessi richiesti.
In caso vada tutto a buon fine, vedrete le coordinate sulla schermata.
Enjoy!
dart flutter geolocator
Commentami!