Flutter Google Maps, Trying to create an already created platform view, view id: 0

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,
          ),
        )
    );
  }
}

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.