Как центрировать виджет GoogleMap на текущем местоположении устройства во Flutter? - PullRequest
0 голосов
/ 08 мая 2020

Вот мой код:

import 'dart:async';

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

class Home extends StatelessWidget {
  final Completer<GoogleMapController> _controller = Completer();

  static final CameraPosition _kGooglePlex = CameraPosition(
    target: LatLng(37.42796133580664, -122.085749655962),
    zoom: 14.4746,
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: GoogleMap(
        myLocationEnabled: true,
        trafficEnabled: true,
        initialCameraPosition: _kGooglePlex,
        onMapCreated: (GoogleMapController controller) {
          _controller.complete(controller);
          _goToCurrentPosition();
        },
      ),
    );
  }

  Future<void> _goToCurrentPosition() async {
    Position position = await Geolocator()
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    final GoogleMapController controller = await _controller.future;
    controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
      target: LatLng(position.latitude, position.longitude),
      zoom: 15,
    )));
  }
}

Мой _goToCurrentPosition метод работает, но он невероятно медленный. После загрузки карты до go требуется несколько секунд. Как только карта загружается, я могу нажать включенную кнопку Google Maps, чтобы перейти к go к текущему местоположению, и он сразу же попадет туда. Есть ли в Google Maps встроенный метод, позволяющий сделать это программно, чтобы я мог центрировать карту относительно текущего местоположения пользователя как можно быстрее? Или даже если бы я мог получить текущее местоположение из Google Maps напрямую, а не через пакет Geolocation? Это похоже на функцию, которую используют многие приложения, поэтому я не уверен, почему я нигде не мог найти хорошее решение.

...