我只是从Flutter开始,这是State / Stream / BloC概念的新手。我正在尝试根据FlutterMap
的Geolocator()
流中的坐标更新Position
中心。目前,我只是调用setState()
用新值更新变量,但是接下来我将尝试使用Bloc模式。现在,除了在流的位置的坐标上设置中心之外,我还在相同的坐标上设置了Marker
。我原本希望在屏幕中心看到一个稳定的标记,而在下面看到一个正在移动的地图,但是相反。.地图稳定并且图标在移动。.您能看到我弄错了什么吗?另外,对于stream:
的StreamBuilder
属性,我如何将Geolocator()
的流作为事件传递?
非常感谢您的时间和帮助。
这是流:
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');
},
)),
],
),
],
),
),
发现了问题。我没有分配任何MapController()
。因此,我创建了一个并将其分配给FlutterMap
。在setState()
中添加了_controller.move(LatLng(_position.latitude, _position.longitude), 16.0);
,现在的行为是预期的。屏幕中央的稳定图标和下方的移动地图。希望这对其他人有帮助。但是我仍然会尝试使用BLoC模式实现相同的目的。干杯