我只是从Flutter开始,对State/Stream/BloC概念非常陌生。我正在尝试基于来自Geolocator()的Position流的坐标来更新FlutterMap中心。目前我只是调用setState(),用新值更新一个变量,但下一步我将尝试使用Bloc模式。现在,除了在来自流的位置的坐标上设置中心之外,我还在相同的坐标上设置了一个Marker。我期望在屏幕中央看到一个稳定的标记,下面是一个移动的地图,但事实恰恰相反。地图是稳定的,图标正在移动。你能看到我哪里搞错了吗?另外,对于StreamBuilder的stream:属性,如何将来自Geolocator()的流作为事件传递?
非常感谢您的时间和帮助。
这就是Stream:
StreamSubscription positionStream = _geolocator
.getPositionStream(locationOptions)
.listen((Position position) {
setState(() {
_position = position;
});
print(
_position.latitude.toString() + ',' + _position.longitude.toString()); // ok
});这是地图和标记:
Container(
height: 670,
width: 370,
child: FlutterMap(
options: MapOptions(
center: LatLng(_position.latitude, _position.longitude),
minZoom: 16.0,
maxZoom: 19.0,
),
layers: [
TileLayerOptions(
// urlTemplate:
// 'https://api.openrouteservice.org/mapsurfer/{z}/{x}/{y}.png?api_key=omitted',
urlTemplate:
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
subdomains: ['a', 'b', 'c'],
keepBuffer: 20),
new MarkerLayerOptions(
markers: [
new Marker(
point: new LatLng(
_position.latitude, _position.longitude),
height: 200,
width: 200,
builder: (context) => IconButton(
icon: Icon(Icons.location_on),
color: Colors.red,
iconSize: 60,
onPressed: () {
print('icon tapped');
},
)),
],
),
],
),
),发布于 2020-02-14 05:54:27
找到了问题所在。我没有分配任何MapController()。所以我创建了一个并将其分配给FlutterMap。在setState()中,我添加了_controller.move(LatLng(_position.latitude, _position.longitude), 16.0);,现在行为符合预期。稳定的图标在屏幕的中心和一个移动的地图下面。希望这能对其他人有所帮助。不过,我还是会尝试用BLoC模式来实现同样的效果。干杯
https://stackoverflow.com/questions/60216720
复制相似问题