辛格尔顿谷歌地图颤抖

时间:2020-04-19 15:21:39

标签: google-maps flutter

我正在使用大量使用Google Map的应用程序中工作,我需要将Google Map设为单例,以便每次用户进入页面时都无法重建。 这是我的尝试,但是我发现它不起作用。因为它重建了map。 这是我的signleton课

class MapSingleton {
  static Widget _mapWidget;
  static GoogleMapController _mapController;
  static final MapSingleton _singleton = MapSingleton._internal();

  LatLng _mainLocation = LatLng(24.7167859, 55.2776692);
  Set<Marker> _markers = Set();

  MapSingleton._internal();

  factory MapSingleton() {
    return _singleton;
  }
  // get only one instance of map
  Widget get MapWidget {
    if (_mapWidget != null) return _mapWidget;
    _mapWidget = GoogleMap(
      initialCameraPosition: CameraPosition(
        target: _mainLocation,
        zoom: 13,
      ),
      mapType: MapType.normal,
      markers: _markers,
      onMapCreated: _onMapCreated,
      myLocationButtonEnabled: false,
      mapToolbarEnabled: false,
    );
    return _mapWidget;
  }

  void _onMapCreated(GoogleMapController controller) async {
    _mapController = controller;
  }
}

这就是我的用法

class MapPage extends StatefulWidget {
  @override
  _MapPageState createState() => _MapPageState();
}

class _MapPageState extends State<MapPage> {
  MapSingleton mapSingleton;

  @override
  void initState() {
    super.initState();
    mapSingleton = MapSingleton();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: mapSingleton.MapWidget,
      ),
    );
  }
}

0 个答案:

没有答案