高德地图的Flutter官方插件:amap_flutter_map 3.0,功能不是非常全,我们常用的一个场景,地图在初始化后,将当前位置设为地图显示的中心,在原生的地图SDK上只需要设置地图的一个属性就可以,但是amap_flutter_map并不支持,需要自己实现。
AMapWidget有一个属性initialCameraPosition,是用来指定地图的初始中心位置的。从源代码可以看出,如果initialCameraPosition没有指定的话,默认值是北京市。如果使用定位功能取得当前位置后再初始化地图的话,因为取当前位置需要时间较长,界面会出现长时间的空白。如果地图先显示出来,取得当前位置后再用setState的方式更新initialCameraPosition属性的话,地图没有反应。在initialCameraPosition属性上作文章是没有办法了。
最后用AMapController的moveCamera方法实现了这个功能,但是有一个问题,就是定位需要较长时间,所以在地图显示一段时间后,中心点才移动到当前位置。在将定位精度降低后,在虚拟机上定位时间也没有缩短,现在只能将就用了,希望在真机上定位时间短一些。
下面是相关代码:
import 'dart:async';
import 'package:amap_flutter_base/amap_flutter_base.dart';
import 'package:amap_flutter_location/amap_flutter_location.dart';
import 'package:amap_flutter_location/amap_location_option.dart';
import 'package:amap_flutter_map/amap_flutter_map.dart';
import 'package:amap_flutter_map_example/base_page.dart';
import 'package:amap_flutter_map_example/const_config.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
class MapPage extends BasePage {
MapPage(String title, String subTitle) : super(title, subTitle);
@override
Widget build(BuildContext context) => _Body();
}
class _Body extends StatefulWidget {
_Body({Key key}) : super(key: key);
@override
_BodyState createState() => _BodyState();
}
class _BodyState extends State<_Body> {
//在按关键字搜索时,传入城市名可以提高搜索精度。
String _cityName;
AMapController _mapController;
Marker _mapMarker;
Map _locationResult;
StreamSubscription
评论列表(0条)