我正在使用大量使用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,
),
);
}
}