Я думаю, что у меня ошибочная архитектура, но я пытаюсь понять, как и почему.Я очень новичок, чтобы трепетать, поэтому терпите меня, пожалуйста.
У меня есть карта и ящик.Я загружаю список координат в ящик, и я хотел бы сделать что-то на карте, как только я нажму одну из этих координат.
Так что моя проблема в том, что я не знаю, как позвонитьгде должен быть чистый код И работает.Конечно, я мог бы просто раскрыть все для всех, но это не решило бы главную проблему: я понимаю
Моя карта нарисована там же, где и мой ящик, так что там я уже думаю, что я обманываю, но я думаю ничего страшного.Если честно, я даже не уверен, что эта часть действительно верна.
Рисуем карту:
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
var _map = MapView();
var _stationService = StationService();
....
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DefaultTabController(
length: 4,
child: Scaffold(
appBar: AppBar(
bottom: TabBar(
tabs: [
Tab(icon: Icon(Icons.directions_car)),
Tab(icon: Icon(Icons.map)),
Tab(icon: Icon(Icons.directions_transit)),
Tab(icon: Icon(Icons.directions_bike))
],
),
title: Text('Floctta Plus'),
),
drawer: _drawer(),
body: TabBarView(
physics: NeverScrollableScrollPhysics(),
children: [
IncrementView(),
_map,
Icon(Icons.directions_transit),
Icon(Icons.directions_bike)
],
),
),
),
);
}
В моем коде ящика:
ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, position) {
return ListTile(
title: new Text(snapshot.data[position].titleFR),
leading: new Icon(Icons.pin_drop),
onTap: () {
_map.GoToStation(); <<= Here, calling the MapView class
},
);
},
),
ВсеКод MapView.dart
class MapView extends StatefulWidget {
MapView({Key key}) : super(key: key);
void GoToStation() {
print("I'm reaching this point with success!");
}
@override
_MapViewState createState() => _MapViewState();
}
class _MapViewState extends State<MapView> {
CameraPosition _initialPosition =
CameraPosition(target: LatLng(50.8267018, 4.3532732), zoom: 10.0);
Completer<GoogleMapController> _controller = Completer();
var _markers;
void AddMarkers(List<Station> stations) {
setState(() {
_markers = new List.generate(
stations.length,
(index) => Marker(
markerId: MarkerId(index.toString()),
position: new LatLng(double.parse(stations[index].latitude),
double.parse(stations[index].longitude)),
infoWindow: InfoWindow(
title: stations[index].titleFR,
snippet: stations[index].city,
),
icon: BitmapDescriptor.defaultMarker,
));
});
}
void _onMapCreated(GoogleMapController controller) {
_controller.complete(controller);
}
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: _initialPosition,
markers: _markers,
myLocationEnabled: true,
),
],
);
// );
}
}
Я думаю, что кода достаточно.
Мой вопрос:
Я сейчас в моем классе Mapview, и я хотел бы позвонить AddMarkers
, который находится в моем классе State.Но я не могу.Я не совсем уверен, как мне поступить.
Должен ли я вызывать класс состояний прямо из ящика?Если так, то как?Должен ли я вызвать состояние из класса представления?Если так, то как?Должен ли я делать что-то еще полностью?Если да, то что?