我正在使用google_maps_Flatter软件包,试图找到一种方法,在两个已知位置的标记之间zoom 相机.任何提示或示例代码都将不胜感激.

推荐答案

要在谷歌 map 中的两个纬度界限之间zoom ,可以执行以下操作:

首先,在pubspec.yaml中导入下面库,否则在旧版本中,您可能无法在Google中看到"getVisibleRegion()"方法 贴图控制器.

谷歌 map :0.5.12

import 'dart:async';

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

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  Completer<GoogleMapController> _controller = Completer();
  GoogleMapController mapController;
  LatLng _lastMapPosition = _center;

  static const LatLng _center = const LatLng(45.521563, -122.677433);

  final Set<Marker> _markers = {};

  void _onMapCreated(GoogleMapController controller) {
    mapController = controller;
    _controller.complete(controller);

    LatLng latLng_1 = LatLng(40.416775, -3.70379);
    LatLng latLng_2 = LatLng(41.385064, 2.173403);
    LatLngBounds bound = LatLngBounds(southwest: latLng_1, northeast: latLng_2);

    setState(() {
      _markers.clear();
      addMarker(latLng_1, "Madrid", "5 Star Rating");
      addMarker(latLng_2, "Barcelona", "7 Star Rating");
    });

    CameraUpdate u2 = CameraUpdate.newLatLngBounds(bound, 50);
    this.mapController.animateCamera(u2).then((void v){
      check(u2,this.mapController);
    });

  }

  void addMarker(LatLng mLatLng, String mTitle, String mDescription){
    _markers.add(Marker(
      // This marker id can be anything that uniquely identifies each marker.
      markerId: MarkerId((mTitle + "_" + _markers.length.toString()).toString()),
      position: mLatLng,
      infoWindow: InfoWindow(
        title: mTitle,
        snippet: mDescription,
      ),
      icon: BitmapDescriptor.defaultMarker,
    ));
  }

  void check(CameraUpdate u, GoogleMapController c) async {
    c.animateCamera(u);
    mapController.animateCamera(u);
    LatLngBounds l1=await c.getVisibleRegion();
    LatLngBounds l2=await c.getVisibleRegion();
    print(l1.toString());
    print(l2.toString());
    if(l1.southwest.latitude==-90 ||l2.southwest.latitude==-90)
      check(u, c);
  }


  void _onCameraMove(CameraPosition position) {
    _lastMapPosition = position.target;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Maps Sample App'),
          backgroundColor: Colors.green[700],
        ),
        body: GoogleMap(
          markers: _markers,
          onMapCreated: _onMapCreated,
          initialCameraPosition: CameraPosition(
            target: _center,
            zoom: 11.0,
          ),
          onCameraMove: _onCameraMove,
        ),
      ),
    );
  }
}

Dart相关问答推荐

?? ("if null") 运算符类型解析问题

`异步内联方法`的这些定义之间有什么区别?

如何在 Flutter 的 firebase_database 中执行事务?

如何使用 http 库捕获 SocketException?

Flutter - MultiProvider 如何与相同类型的提供者一起工作?

将Card添加到 ListView

有没有办法在用户停止输入后发送请求?

跳过 JavaScript 直接进入 Dart

如何使用Flutter dio 下载文件?

Flatter中的Sqlite,数据库assets如何工作

有没有办法在Flatter中使用PageView实现无限循环?

Flutter:并非所有本地化代表都支持应用程序的语言环境

更新复选框并从Flutter对话框中返回值

Flutter /dart 错误:参数类型'Future'不能分配给参数类型'File'

为什么 Dart 有编译时常量?

Dart:你如何让 Future 等待 Stream?

Dart 中的抽象基类

如何判断一个对象是否是一个类的实例

必须初始化不可为空的实例字段

你如何在 Dart 中构建一个单例?