#flutter #google-maps #location #flutter-dependencies
#flutter #google-maps #location #flutter-dependencies
Вопрос:
В настоящее время я пытаюсь получить текущее местоположение устройства и отобразить его на картах Google. Однако во время моего первого запуска и всякий раз, когда я перезагружаюсь, я продолжаю получать ошибку «LateInitializationError: поле» Текущее местоположение » не было инициализировано.». Но когда я попытался перезагрузить приложение, на карте появилась правильная информация. Может ли кто-нибудь объяснить, почему это происходит и как это исправить?
В других сообщениях говорится, что я должен включить будущее.функция с задержкой, но когда я попытался разместить ее в разных местах, красный экран по-прежнему отображается в зависимости от времени, указанного в функции. Кто-нибудь может мне помочь?
Вот мой код:
import 'dart:async'; import 'package:flutter/material.dart'; import 'package:location/location.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:travellert/maps/pin_pill_info.dart'; const double CAMERA_ZOOM = 18; const LatLng SOURCE_LOCATION = LatLng(42.747932, -71.167889); class GoogleMapPage extends StatefulWidget { const GoogleMapPage({Key? key}) : super(key: key); @override _GoogleMapPageState createState() =gt; _GoogleMapPageState(); } class _GoogleMapPageState extends Statelt;GoogleMapPagegt; { final Completerlt;GoogleMapControllergt; _controller = Completer(); late LocationData currentLocation; late Location location; late MarkerId markerId1; late Marker marker1; final Setlt;Markergt; _markers = lt;Markergt;{}; late PinInformation sourcePinInfo; @override void initState() { super.initState(); location = Location(); location.onLocationChanged.listen((LocationData cLoc) { currentLocation = cLoc; updatePinOnMap(); }); setInitialLocation(); } void setInitialLocation() async { currentLocation = await location.getLocation(); } @override Widget build(BuildContext context) { CameraPosition initialCameraPosition = const CameraPosition( target: SOURCE_LOCATION, zoom: CAMERA_ZOOM, ); if (currentLocation != null) { initialCameraPosition = CameraPosition( target: LatLng(currentLocation.latitude!, currentLocation.longitude!), zoom: CAMERA_ZOOM, ); } return Scaffold( body: GoogleMap( myLocationEnabled: true, compassEnabled: true, tiltGesturesEnabled: false, mapType: MapType.normal, initialCameraPosition: initialCameraPosition, onMapCreated: (GoogleMapController controller) { _controller.complete(controller); showPinsOnMap(); })); } void showPinsOnMap() { var pinPosition = LatLng(currentLocation.latitude!, currentLocation.longitude!); sourcePinInfo = PinInformation( locationName: "Start Location", location: SOURCE_LOCATION, ); _markers.add(Marker( markerId: const MarkerId('sourcePin'), position: pinPosition, )); } void updatePinOnMap() async { CameraPosition cPosition = CameraPosition( zoom: CAMERA_ZOOM, target: LatLng(currentLocation.latitude!, currentLocation.longitude!)); final GoogleMapController controller = await _controller.future; controller.animateCamera(CameraUpdate.newCameraPosition(cPosition)); setState(() { var pinPosition = LatLng(currentLocation.latitude!, currentLocation.longitude!); sourcePinInfo.location = pinPosition; _markers.removeWhere((m) =gt; m.markerId.value == 'sourcePin'); _markers.add( Marker(markerId: const MarkerId('sourcePin'), position: pinPosition)); }); } }