位置变化结束时的颤动地图

Ara*_*adi 3 android location flutter fluttermap

我正在使用 flutter_map 将地图添加到我的项目中。我能够使用它并使用它的选项。但我想要一些在 flutter_map 中找不到的东西。

我想听位置变化并获取用户停止触摸屏幕时的最后位置。就像 GestureDetector 小部件中的 onTapUp 或 onLongPressUp 一样。

flutter_map 中有 onPositionChanged 选项,但每次位置改变时都会调用它,这是很多。一旦用户触摸屏幕,onPositionChanged 就会被调用,直到用户停止触摸屏幕。我可以从中获取最后的位置,但我想在位置发生变化时调用 API 以获取附近汽车的列表。每次调用 onPositionChanged 时都调用 API 并不好。

所以我希望能够在用户完成位置更改时(当他/她停止触摸屏幕时)调用 API。

这是我的 flutter_map 代码:

     FlutterMap(
            key: Key('map'),
            mapController: main.mapController,

            options: MapOptions(
                center: LatLng(main.lat, main.long),
                zoom: 14,
                maxZoom: 18,
                minZoom: 10,
                onPositionChanged: (mapPosition, boolValue){
                  _lastposition = mapPosition.center;
                }),


            layers: [
              TileLayerOptions(
                errorImage: AssetImage('images/login_icon.png'),
                urlTemplate:
                    "https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",
                // subdomains: ['a', 'b', 'c'],
                // subdomains: ['', '1', '2', '3', '4']
              ),
              MarkerLayerOptions(
                markers: main.markersStart +
                    main.markersDestination +
                    main.driverMarkers,
              ),
            ],
          ),
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,谢谢:)。

小智 6

我发现的最好的解决方案是添加一个侦听器MapEventStream(在此处检查事件:map_events.dart

  MapController mapController;
  StreamSubscription subscription;

  @override
  void initState() {
    mapController = MapController();

    mapController.onReady.then((_) {
      subscription = mapController.mapEventStream.listen((MapEvent mapEvent) {
        if (mapEvent is MapEventMoveStart) {
          print(DateTime.now().toString() + ' [MapEventMoveStart] START');
          // do something
        }
        if (mapEvent is MapEventMoveEnd) {
          print(DateTime.now().toString() + ' [MapEventMoveStart] END');
          // do something
        }
      });
    });
    super.initState();
  }

  @override
  void dispose() {
    subscription.cancel();
    super.dispose();
  }
Run Code Online (Sandbox Code Playgroud)

非常感谢这篇文章对我的帮助


归档时间:

查看次数:

4439 次

最近记录:

3 年,4 月 前