GoogleMap карта не отображается
Если в ручном режиме задать координаты
target: LatLng(48.5244722, 39.2643343),
, то карта отображается. Если координаты определять динамически, с помощью package:geolocator карта не отображается. ПОЧЕМУ? Далее, полный пример кода и скриншот.
main.dart
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Name App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Name Page'),
),
body: MyHomePage(),
),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _str = ''; //для проверки
double _latitude = 0.0; //широта
double _longitude = 0.0; //долгота
@override
void initState() {
super.initState();
_getPosition().then((value) {
_latitude = value.latitude;
_longitude = value.longitude;
_str = '$_latitude\n$_longitude';
});
}
@override
void dispose() {
super.dispose();
}
void _f1() {
setState(() {
});
}
Future<Position> _getPosition() async {
Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.best);
return position;
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
GoogleMap(
initialCameraPosition: CameraPosition(
//target: LatLng(48.5244722, 39.2643343),
target: LatLng(_latitude, _longitude),
zoom: 19.151926040649414,
bearing: 222.8334901395799,
),
mapType: MapType.hybrid,
),
Align(
alignment: Alignment(0.0, 0.95),
child: Text(
_str,
style: TextStyle(
fontSize: 20.0,
),
),
),
],
);
}
}
Ответы (1 шт):
Автор решения: MiT
→ Ссылка
Перенос ответа из комментариев, чтобы закрыть вопрос.
В виджете GoogleMap есть метод onMapCreated, у которого в параметре передается GoogleMapController. Через GoogleMapController следует управлять картой.
Пример:
class MapSample extends StatefulWidget {
@override
State<MapSample> createState() => MapSampleState();
}
class MapSampleState extends State<MapSample> {
Completer<GoogleMapController> _controller = Completer();
@override
Widget build(BuildContext context) {
return new Scaffold(
body: GoogleMap(
mapType: MapType.hybrid,
initialCameraPosition: CameraPosition(
target: LatLng(37.42796133580664, -122.085749655962),
zoom: 14.4746,
),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
),
floatingActionButton: FloatingActionButton.extended(
onPressed: _goToTheLake,
label: Text('To the lake!'),
icon: Icon(Icons.directions_boat),
),
);
}
Future<void> _goToTheLake() async {
final GoogleMapController controller = await _controller.future;
controller.animateCamera(CameraUpdate.newCameraPosition(
CameraPosition(
bearing: 192.8334901395799,
target: LatLng(37.43296265331129, -122.08832357078792),
tilt: 59.440717697143555,
zoom: 19.151926040649414,
),
),
);
}
}
