For first time google maps flutter ,loads perfect but when hot restart it , it goes to platform exception
google_maps_flutter: ^0.5.21+15
Github [google_maps_fl
The issue is due to using the same controller in multiple GoogleMaps widget. Build only one GoogleMap widget and use the GoogleMapController object to make any changes.
According to the API,
Do not change the camera with this camera update until the map has undergone layout (in order for this method to correctly determine the appropriate bounding box and zoom level, the map must have a size). Otherwise an IllegalStateException will be thrown.
I had the same issue and after some debugging, it looks like whenever you hotreload while the map is in view, it will give the error.
But you can prevent the error if you hot reload after disposing the map.
In other words, it is there to prevent multiple instances of maps to be active.
So I would suggest to dispose the map before hot reload while in development.
In a production version, users won't be able to hot reload thus, they won't encounter the platform issue.
To solve this issue I did the following via the terminal:
1- Changed the branch to Master branch:
flutter channel master
2- Upgraded Flutter
flutter upgrade
3- Cleaned the code:
flutter clean
I also had the same issue and using flutter clean
didn't solve it for me (flutter version 1.12.13+hotfix 8)
But then, adding a unique key to the widget (not to its state) solved the issue for me.
minimum working code sample to demonstrate this.
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Map not crashing demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: LocationScreen(),
);
}
}
class LocationScreen extends StatefulWidget
{
final Key _mapKey = UniqueKey();
@override
_LocationScreenState createState() => _LocationScreenState();
}
class _LocationScreenState extends State<LocationScreen>
{
@override
Widget build(BuildContext context)
{
return Scaffold(
appBar: AppBar(title: const Text('Map not crashing demo')),
body: TheMap(key:widget._mapKey)
);
}
}
class TheMap extends StatefulWidget
{
///key is required, otherwise map crashes on hot reload
TheMap({ @required Key key})
:
super(key:key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<TheMap>
{
GoogleMapController _mapController ;
void _onMapCreated(GoogleMapController controller) {
_mapController = controller;
}
@override
Widget build(BuildContext context)
{
return Scaffold(
//also this avoids it crashing/breaking when the keyboard is up
resizeToAvoidBottomInset: false,
body: GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: const LatLng(30.0925973,31.3219982),
zoom: 11.0,
),
)
);
}
}
The issue is referenced here: https://github.com/flutter/flutter/issues/45695