Я только начинаю с Flutter и очень плохо знаком с концепциями State / Stream / Blo C. Я пытаюсь обновить FlutterMap
центр на основе координат из потока Geolocator()
Position
. В данный момент я просто вызываю setState()
, обновляя переменную новым значением, но затем я попытаюсь использовать шаблон Blo c вместо этого. Теперь, как и я, устанавливаю центр по координатам Положение, исходящее из потока, я также установил Marker
по тем же координатам. Я ожидал увидеть маркер Steady в центре экрана и движущуюся карту внизу, но наоборот ... Карта устойчива, а значок движется ... Вы видите, где я ошибся? Кроме того, для свойства 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');
},
)),
],
),
],
),
),