[英]location in real time with flutter
我正在嘗試使用我的設備上的 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"))
]),
)));
}
}
為此,您可以使用 stream object。 地理定位器 package 提供了這樣的 api,它可以持續監聽變化。
這是一個例子:
import 'package:geolocator/geolocator.dart';
var geolocator = Geolocator();
var locationOptions = LocationOptions(accuracy: LocationAccuracy.high,
distanceFilter: 10);
StreamSubscription<Position> positionStream = geolocator
.getPositionStream(locationOptions)
.listen((Position position) {
print(position == null ? 'Unknown' : position.latitude.toString() + ', ' +
position.longitude.toString());
});
Using this in combination with a StreamBuilder widget ( https://api.flutter.dev/flutter/widgets/StreamBuilder-class.html ) you should be able to reflect any position updates to the ui.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.