Я пытаюсь реорганизовать свой код и разделил класс showMap на новый файл dart. Я передаю широту и долготу с экрана, на котором этот класс вызывается для showMap. Я проверил, что широта и долгота здесь не равны нулю. Но я получаю сообщение об ошибке:
The following NoSuchMethodError was thrown building showMap(dirty): The method 'compareTo' was called on null. Receiver: null Tried calling: compareTo(-90.0)
class showMap extends StatelessWidget {
showMap({this.latitude, this.longitude});
double latitude;
double longitude;
@override
Widget build(BuildContext context) {
return FlutterMap(
options: MapOptions(
center: LatLng(latitude, longitude), // The Error line
zoom: 16.0,
),
layers: [
TileLayerOptions(
urlTemplate: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
subdomains: ['a', 'b', 'c']),
MarkerLayerOptions(
markers: [
Marker(
width: 80.0,
height: 80.0,
point: LatLng(58.7041, 37.1025),
builder: (ctx) => GestureDetector(
child: Container(
child: Icon(
Icons.location_on,
size: 60,
color: Color(0xFF744D81),
),
),
onTap: () {
showModalBottomSheet(
context: context,
builder: (context) {
return MarkerPopup();
});
},
),
),
Marker(
width: 80.0,
height: 80.0,
point: LatLng(58.4419, 37.0784),
builder: (ctx) => GestureDetector(
child: Container(
child: Icon(Icons.location_on,
size: 60, color: Color(0xFF744D81)),
),
onTap: () {
showModalBottomSheet(
context: context,
builder: (context) {
return MarkerPopup();
});
},
),
),
],
),
],
);
}
}
Вот часть кода, в которой вызывается showMap:
class _HomePageState extends State<HomePage> {
void getLocation() async {
Location location = Location();
await location.getCurrrentLocation();
latitude = location.latitude;
longitude = location.longitude;
}
@override
void initState() {
super.initState();
getLocation();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Udan'),
backgroundColor: Color(0xFF4E295B),
centerTitle: true,
),
body: Stack(
children: <Widget>[
showMap(
latitude: latitude,
longitude: longitude,
),
],
),
);
}
}
Особенность в том, что через секунду-две ошибка исчезает и карта загружается в правильный центр. Но пока что код ломается, и на экране отображается ошибка. Я предполагаю, что это связано с тем, что для получения местоположения требуется время, а нулевые значения широты и долготы передаются до тех пор, пока местоположение не будет получено. Я уже использовал async await на исходном экране перед присвоением значения showMap. Как мне заставить это работать? Спасибо.