Я пытаюсь зафиксировать широту и долготу в реальном времени с помощью GPS на моем устройстве, однако пока я получаю только текущую долготу и широту, и они не обновляются.
Что я хочу сделать заключается в том, что когда GPS обнаруживает, что широта или долгота изменились, они обновляются на экране
, кроме того, со мной происходит, что когда я запускаю, если я запускаю приложение и отказываю в разрешении, приложение ломается
Для этого упражнения я использую геолокатор: ^ 5.3.2 + 2 Благодарю за вашу помощь введите здесь описание изображения
Ошибка введите описание изображения здесь
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
void main() => runApp(App());
class App extends StatefulWidget {
@override
_AppState createState() => _AppState();
}
class _AppState extends State<App> {
String _locationMessage = "";
Future disponiblidad() async {
var geoLocator = Geolocator();
var status = await geoLocator.checkGeolocationPermissionStatus();
if (status == GeolocationStatus.denied) {
//pedirpermiso();
// Llevar a la usuario a la configuración de permisos
print('Llevar a la usuario a la configuración de permisos');
} else if (status == GeolocationStatus.disabled) {
//AppSettings.openLocationSettings();
//Llevar a la usuario a la página de ubicación
print('Llevar a la usuario a la página de ubicación');
} else if (status == GeolocationStatus.restricted) {
// Restringida
print('Restringida');
} else if (status == GeolocationStatus.unknown) {
// Desconocida
print('Desconocida');
} else if (status == GeolocationStatus.granted) {
//Permiso otorgado y ubicación habilitada
print('Permiso otorgado');
location();
}
}
void pedirpermiso() async {
final position = await Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
if (position == null) {}
}
void location() async {
var geolocator = Geolocator();
var locationOptions =
LocationOptions(accuracy: LocationAccuracy.high, distanceFilter: 10);
// ignore: unused_local_variable
// ignore: cancel_subscriptions
StreamSubscription<Position> positionStream = geolocator
.getPositionStream(locationOptions)
.listen((Position position) {
setState(() {
print(position == null
? 'Unknown'
: position.latitude.toString() +
', ' +
position.longitude.toString());
_locationMessage =
"${position.latitude.toString()}, ${position.longitude.toString()}";
//String hoa = positionStream;
});
});
}
@override
void initState() {
super.initState();
// _checkGps();
disponiblidad();
}
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
appBar: AppBar(title: Text("Location Services")),
body: Align(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(_locationMessage),
FlatButton(
onPressed: () {
// _getCurrentLocation();
},
color: Colors.green,
child: Text("Find Location"))
]),
)));
}
}