MapboxMap 的控制器在被侦听器调用时的 cameraPosition 等于 null
MapboxMap's controller has cameraPosition equal to null when called by a listener
我正在尝试在相机位置添加标记。因此,每当用户在地图上移动时,我都需要获取相机的位置。经过快速研究,我发现设置一个在用户每次移动时调用的监听器应该很容易,并使用 controller.cameraPosition
提取相机位置。看起来非常简单,但是当调用侦听器时 controller.cameraPosition
总是 null
。只有当 onMapCreated
函数被触发时,它才有正确的值。
这是一个简单的可重现代码示例:
import 'package:flutter/material.dart';
import 'package:mapbox_gl/mapbox_gl.dart';
import 'package:test_01/secretAccessToken.dart';
void main() {
runApp(
MaterialApp(
home: MyMapBoxMap(),
)
);
}
class MyMapBoxMap extends StatefulWidget {
@override
_MyMapBoxMapState createState() => _MyMapBoxMapState();
}
class _MyMapBoxMapState extends State<MyMapBoxMap> {
MapboxMapController mapController;
void _onMapCreated(MapboxMapController controller) {
mapController = controller;
print("On map created: ${mapController.cameraPosition}");
mapController.addListener(() {
print(mapController.cameraPosition);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: MapboxMap(
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(target: LatLng(42, 42), zoom: 3),
accessToken: secretAccessToken,
),
);
}
}
(secretAccessToken
是可在 mapbox 网站上获得的私有访问令牌)
这是输出日志:
...
I/flutter (18328): On map created: CameraPosition(bearing: 0.0, target: LatLng(42.0, 42.0), tilt: 0.0, zoom: 3.0)
...
I/flutter (18328): null
...
我正在使用 mapbox_gl: ^0.8.0
我是否遗漏了一些我应该阅读的非常明显的内容?
感谢阅读
答案很简单。您可以阅读 here(在 mapbox_gl 的文档中)cameraPosition
Will be null, if MapboxMap.trackCameraPosition is false
感觉有点傻rn
我正在尝试在相机位置添加标记。因此,每当用户在地图上移动时,我都需要获取相机的位置。经过快速研究,我发现设置一个在用户每次移动时调用的监听器应该很容易,并使用 controller.cameraPosition
提取相机位置。看起来非常简单,但是当调用侦听器时 controller.cameraPosition
总是 null
。只有当 onMapCreated
函数被触发时,它才有正确的值。
这是一个简单的可重现代码示例:
import 'package:flutter/material.dart';
import 'package:mapbox_gl/mapbox_gl.dart';
import 'package:test_01/secretAccessToken.dart';
void main() {
runApp(
MaterialApp(
home: MyMapBoxMap(),
)
);
}
class MyMapBoxMap extends StatefulWidget {
@override
_MyMapBoxMapState createState() => _MyMapBoxMapState();
}
class _MyMapBoxMapState extends State<MyMapBoxMap> {
MapboxMapController mapController;
void _onMapCreated(MapboxMapController controller) {
mapController = controller;
print("On map created: ${mapController.cameraPosition}");
mapController.addListener(() {
print(mapController.cameraPosition);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: MapboxMap(
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(target: LatLng(42, 42), zoom: 3),
accessToken: secretAccessToken,
),
);
}
}
(secretAccessToken
是可在 mapbox 网站上获得的私有访问令牌)
这是输出日志:
...
I/flutter (18328): On map created: CameraPosition(bearing: 0.0, target: LatLng(42.0, 42.0), tilt: 0.0, zoom: 3.0)
...
I/flutter (18328): null
...
我正在使用 mapbox_gl: ^0.8.0
我是否遗漏了一些我应该阅读的非常明显的内容?
感谢阅读
答案很简单。您可以阅读 here(在 mapbox_gl 的文档中)cameraPosition
Will be null, if MapboxMap.trackCameraPosition is false
感觉有点傻rn