Я пытаюсь открыть карту Google с текущим местоположением. Для этого я использую виджет с сохранением состояния. Но загрузка карты занимает много времени, иногда даже не загружается. Это из-за функции Future
(для получения текущего местоположения) или моя реализация неверна? Я использую google_maps_flutter плагин для карты. Вот мой код:
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
FutureBuilder(
future: _getCurrentLocation(),
builder: (context, snapshot) {
if (snapshot.hasData) {
print("map loaded");
Placemark placemark = snapshot.data;
var json = placemark.toJson();
selectedLocation = TheLocation.fromJson(json);
_markers.add(
Marker(
markerId: MarkerId('homeMarker'),
position: LatLng(
selectedLocation.latitude, selectedLocation.longitude),
icon: BitmapDescriptor.defaultMarker,
infoWindow: InfoWindow(title: selectedLocation.name),
draggable: false,
),
);
return GoogleMap(
initialCameraPosition: CameraPosition(
target: LatLng(placemark.position.latitude,
placemark.position.longitude),
zoom: 18,
),
markers: _markers,
onMapCreated: onMapCreated,
onCameraMove: ((_position) => _updatePosition(_position)),
);
} else {
print("loading map");
return Container(
child: Center(
child: Text("Loading map. Please Wait ... ..."),
),
);
}
},
),
],
),
);
}
Использование плагина geolocator для получения текущего местоположения:
Future<Placemark> _getCurrentLocation() async {
List<Placemark> placeMarks;
await geolocator
.getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
.then((Position position) async {
placeMarks = await Geolocator().placemarkFromCoordinates(
position.latitude,
position.longitude,
localeIdentifier: "en_US",
);
}).catchError((e) {
print("Location error $e");
});
return placeMarks[0];
}
onMapCreated
Функция:
void onMapCreated(GoogleMapController controller) {
setState(() {
googleMapController = controller;
});
}