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

前端 未结 5 2329
萌比男神i
萌比男神i 2021-02-18 22:15

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

相关标签:
5条回答
  • 2021-02-18 22:35

    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.

    0 讨论(0)
  • 2021-02-18 22:42

    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.

    0 讨论(0)
  • 2021-02-18 22:53

    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

    0 讨论(0)
  • 2021-02-18 22:58

    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,
              ),
            )
        );
      }
    }
    
    0 讨论(0)
  • 2021-02-18 22:58

    The issue is referenced here: https://github.com/flutter/flutter/issues/45695

    0 讨论(0)
提交回复
热议问题