Я делаю флаттер-приложение, которое добавляет маркеры на карту в зависимости от текущего местоположения. У меня есть информационный экран, который берет информацию о пользователе и передает эту информацию маркеру, который будет добавлен на флаттер-карты Google. У меня проблемы с передачей набора маркеров в мой map_view.dart. Ниже приведена функция Future для добавления маркеров на карту из текущего местоположения и последующего перехода к экрану карты с набором _marker, объявленным в
создание функции Future с именем _addMarker(), которая будет получать текущее местоположение пользователя, размещать маркер в этой точке и возвращаться к экрану map_view.dart.
Экран info_window.dart.
final Set<Marker> _markers = {};
Future<void> _addMarker() async {
getUserCurrentLocation().then((value) async {
//print(value.latitude.toString() + " " + value.longitude.toString());
String ID;
// marker added for current users location
int x = 2;
x + 1;
ID = x.toString();
_markers.add(Marker(
markerId: MarkerId(ID), //this can be taken from the other screen maybe
position: LatLng(value.latitude, value.longitude),
infoWindow: InfoWindow(
title: 'My Current Location',
snippet: 'captured from info window too',
onTap: () => _goToInfoScreen(),
),
));
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MapSample(_markers),
));
});
setState(() {
//_markers = result as Set<Marker>;
});
//});
}
И сделайте это для моего экрана map_view.dart, пытаясь установить маркер, который будет использоваться на этом экране.
экран map_view.dart
class MapSample extends StatefulWidget {
//Set<Marker> markers = {};
const MapSample(Set<Marker> marker, {Key? key}) : super(key: key);
@override
State<MapSample> createState() => MapSampleState();
}
//late final Set<Marker> _markers;
//marker = MapSample(_markers);
class MapSampleState extends State<MapSample> {
...
Я борюсь с использованием этой переменной после того, как она будет передана на этот экран, при попытке использовать переменную маркера для добавления маркеров на карту, которые они никогда не появляются. Есть ли другой/любой способ получить набор на экране map_view.dart после того, как он будет передан из навигатора на экране info_window.dart?
Если вы хотите использовать переменные внутри класса State, происходящего из основного класса, расширяющего StatefulWidget
, вам нужно использовать widget.variable
. В вашем случае это widget.marker
.
class MapSample extends StatefulWidget {
//Set<Marker> markers = {};
const MapSample(Set<Marker> marker, {Key? key}) : super(key: key);
@override
State<MapSample> createState() => MapSampleState();
}
//late final Set<Marker> _markers;
//marker = MapSample(_markers);
class MapSampleState extends State<MapSample> {
late Type foo;
@override
void initState() {
foo = widget.foo;
super.initState();
}
Вам не нужно назначать его новой переменной. Вы можете напрямую вызвать widget.marker внутри вашего метода сборки класса State
.
Извините, я забыл упомянуть, что вы можете вызвать его внутри метода сборки или initState
Я понял, что проблема недоступна для виджета, но теперь он говорит: «Маркер получателя» не определен для типа «MapSample». Попробуйте импортировать библиотеку, которая определяет «маркер», исправив имя на имя существующего геттер или определение геттера или поля с именем «маркер». Это потому, что это не объявлено заранее?
Поделитесь, где вы объявили marker
?
маркер определен в MapSample(Set<Marker> marker,...), поэтому он может принимать этот параметр, а значение, которое используется для этого параметра, определяется на экране info_window.dart, отображаемом в верхней части первого фрагмента. Затем код отправляется на экран Map_view в функции _addMarker. Нужно ли объявлять переменную и устанавливать ее в качестве маркера в MapSample(). Маркер не определен на экране map_view, но в окне info_window и с точками останова я подтвердил, что значение отправляется, но использование этого значения все еще остается проблемой.
Я смог заставить его работать, решение было проще, чем я думал, мне нужно было определить маркер как MapSample(this.marker,...), а затем определить его как Set<Marker> marker = {}. после этого я смог использовать это значение с widget.merker в методе сборки, спасибо за помощь
Нужно ли для этого создавать переменную с именем marker? также я пытался реализовать и получить ошибки, говорящие о том, что инициализатор не может получить доступ к члену экземпляра «виджет».