使用 Flutter Google 地图插件查看所有标记

Ann*_*ill 3 google-maps dart hybrid-mobile-app flutter

我正在使用此包创建一个带有 flutter 的应用程序:https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter

我从服务器获取位置列表,我必须在地图上放置标记。我面临的问题是放置在地图上的所有标记都必须在地图上可见。位置列表是随机的,所以我无法假设它们是否都在一个城市,或者是否分布在整个星球上。我怎样才能让所有标记都在视野中?

Sha*_*hmi 7

尝试下面的代码。它正在处理数百个标记。

  // Set<Marker> _markers = Set();
  @override
  Widget build(BuildContext context) {
    return GoogleMap(
      mapType: MapType.hybrid,
      myLocationEnabled: true,
      initialCameraPosition: CameraPosition(
          target: LatLng(_bloc.location.latitude, _bloc.location.longitude),
          zoom: 3),
      markers: _markers,
      onMapCreated: (GoogleMapController controller) {
        _controller.complete(controller);
        Future.delayed(
            Duration(milliseconds: 200),
            () => controller.animateCamera(CameraUpdate.newLatLngBounds(
                MapUtils.boundsFromLatLngList(
                    _markers.map((loc) => loc.position).toList()),
                1)));
      },
    );
  }
Run Code Online (Sandbox Code Playgroud)

map_utils.dart

import 'package:google_maps_flutter/google_maps_flutter.dart';

class MapUtils {
  static LatLngBounds boundsFromLatLngList(List<LatLng> list) {
    double x0, x1, y0, y1;
    for (LatLng latLng in list) {
      if (x0 == null) {
        x0 = x1 = latLng.latitude;
        y0 = y1 = latLng.longitude;
      } else {
        if (latLng.latitude > x1) x1 = latLng.latitude;
        if (latLng.latitude < x0) x0 = latLng.latitude;
        if (latLng.longitude > y1) y1 = latLng.longitude;
        if (latLng.longitude < y0) y0 = latLng.longitude;
      }
    }
    return LatLngBounds(northeast: LatLng(x1, y1), southwest: LatLng(x0, y0));
  }
} 
Run Code Online (Sandbox Code Playgroud)

  • “MapUtils”从哪里来? (6认同)
  • 它就像一个魅力。对于此处附加的空安全版本,https://github.com/MuthuHere/GoogleMapFlutterSetBounds/blob/main/README.md (2认同)