簡體   English   中英

使用 flutter 實時定位

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM