Загрузка карты Google с текущим местоположением во Флаттере занимает много времени - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь открыть карту 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;
    });
  }

1 Ответ

1 голос
/ 31 марта 2020

Похоже, это известная проблема. Проверьте это Git Ссылка на выпуск . Как предлагается в последнем комментарии, в качестве обходного пути вы можете создать FutureBuilder с имитированной задержкой в ​​качестве будущего, а затем использовать индикатор прогресса, чтобы показать загрузку.

...