首页 > 解决方案 > 我的流在两次获得纬度和经度后崩溃,并且没有跟随我当前的位置。这是什么原因造成的?

问题描述

两次地理定位更新后,它崩溃并且不在地图中跟随我:

  StreamSubscription subscription;


    super.initState();
    subscription = getPositionStream(desiredAccuracy: LocationAccuracy.high, distanceFilter: 10).listen(
            (Position position) async {
              getLocation();
              centerScreen(position);
          print(position == null ? 'Unknown' : position.latitude.toString() + ', ' + position.longitude.toString());
        });
  }

为了安全起见,我尝试将:subscription.resume() 添加到我的_onMapCreated(颤动谷歌地图)。没有影响...

这是我的getLocation:

  Future getLocation() async {

    Position position =
        await getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    lat = position.latitude;
    lng = position.longitude;

    setState(() {});
  }

和我的中心屏幕功能:

  Future<void> centerScreen(Position position) async {

    final GoogleMapController controller = await _controller.future;
    controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
        target: LatLng(position.latitude, position.longitude),
        zoom: _currentZoom)));
  }

这是最新版本的颤振地理定位器和颤振谷歌地图。

两天来我一直在试图解决这个问题......我非常感谢你的帮助。先感谢您。

标签: google-mapsflutterdart

解决方案


带有地理定位器的 GoogleMapFlutter

 // GoogleMapFlutter with Geolocator
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';

class Map extends StatefulWidget {
  @override
  _MapState createState() => _MapState();
}

class _MapState extends State<Map> {
  bool mapToggle = false;
  var currentLocation;

  @override
  //initiate position
  void initState() {
    super.initState();
    //Geolocation
    Geolocator.getCurrentPosition().then((currloc) {
      setState(() {
        currentLocation = currloc;
        mapToggle = true;
      });
    });
  }

  //Location Marker
  Set<Marker> _createMarker() {
    return <Marker>[
      Marker(
        markerId: MarkerId("currentLocation"),
        position: LatLng(currentLocation.latitude, currentLocation.longitude),
        icon: BitmapDescriptor.defaultMarker,
        infoWindow: InfoWindow(title: "Your Location"),
      )
    ].toSet();
  }

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        mapToggle
            //Google Map flutter
            ? GoogleMap(
                mapType: MapType.normal,
                markers: _createMarker(),
                initialCameraPosition: CameraPosition(
                    target: LatLng(
                        currentLocation.latitude, currentLocation.longitude),
                    zoom: 15.0))
            //Loading
            : Center(
                child: Text(
                'Loading.. Please wait..',
                style: TextStyle(fontSize: 20.0),
              )),
      ],
    );
  }
}


推荐阅读