google map flutter plugin

hello I try to use google map plugin for flutter https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter

I use this exemple
https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter/example/lib

but in this exemple there is some page. In my application I need only one map at the launch on the app. Problem, with this exemple I didn't manage to use it at my convenience. So I try to use the minimalist example of the read.me but it's a statlesswidget, and I and can't integer Tag fonction or the map_ui.dart like the complet example. So I tried to pass this stateless in statefull but when I do this I have an error

here is what I tried to compile from the two example



exemple 1 https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter

void main() {
GoogleMapController.init();
final GoogleMapOverlayController controller =
GoogleMapOverlayController.fromSize(width: 300.0, height: 200.0);
final Widget mapWidget = GoogleMapOverlay(controller: controller);
runApp(MaterialApp(
home: new Scaffold(
appBar: AppBar(title: const Text('Google Maps demo')),
body: MapUiBody(mapWidget, controller.mapController),
),
navigatorObservers: <NavigatorObserver>[controller.overlayController],
));
}




exemple 2

https://github.com/flutter/plugins/blob/master/packages/google_maps_flutter/example/lib/map_ui.dart

class MapUiBody extends StatefulWidget {
final GoogleMapOverlayController controller;

const MapUiBody(this.controller, GoogleMapController mapController);

@override
State<StatefulWidget> createState() =>
MapUiBodyState(controller.mapController);
}

class MapUiBodyState extends State<MapUiBody> {
MapUiBodyState(this.mapController);

final GoogleMapController mapController;

@override
Widget build(BuildContext context) {
return Column(
);
}
}




with this, I have an error

body: MapUiBody(mapWidget, controller.mapController),




mapWidget: the argument type Widget can't be assigned to the parameter type 'GooglemapoverlayController'


I succeeded to display map on home page but I can't move the map ..

void main() {
GoogleMapController.init();
final GoogleMapOverlayController controller =
GoogleMapOverlayController.fromSize(width: 300.0, height: 200.0);
final Widget mapWidget = GoogleMapOverlay(controller: controller);
runApp(MaterialApp(
home: new Scaffold(
appBar: AppBar(title: const Text('Google Maps demo')),
body: MapsDemo(mapWidget, controller.mapController),
),
));
}


class MapsDemo extends StatelessWidget {
MapsDemo(this.mapWidget, this.controller);

final Widget mapWidget;
final GoogleMapController controller;
@override
final GoogleMapOverlayController mapController =
GoogleMapOverlayController.fromSize(
width: 300.0,
height: 200.0,
options: GoogleMapOptions(
cameraPosition: const CameraPosition(
target: LatLng(-33.852, 151.211),
zoom: 11.0,
),
trackCameraPosition: true,
),
);

@override
Widget build(BuildContext context) {
return MapUiBody(mapController);
}
}


class MapUiBody extends StatefulWidget {
final GoogleMapOverlayController controller;

const MapUiBody(this.controller);

@override
State<StatefulWidget> createState() =>
MapUiBodyState(controller.mapController);
}

class MapUiBodyState extends State<MapUiBody> {
MapUiBodyState(this.mapController);

final GoogleMapController mapController;
GoogleMapOptions _options;

@override
void initState() {
super.initState();
mapController.addListener(_onMapChanged);
_extractMapInfo();
}

void _onMapChanged() {
setState(() {
_extractMapInfo();
});
}

void _extractMapInfo() {
_options = mapController.options;
}

@override
void dispose() {
mapController.removeListener(_onMapChanged);
super.dispose();
}


Widget _mapTypeCycler() {
final MapType nextType =
MapType.values[(_options.mapType.index + 1) % MapType.values.length];
return FlatButton(
child: Text('change map type to $nextType'),
onPressed: () {
mapController.updateMapOptions(
GoogleMapOptions(mapType: nextType),
);
},
);
}



@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(10.0),
child: Center(
child: GoogleMapOverlay(controller: widget.controller),
),
),
Column(
children: <Widget>[

_mapTypeCycler(),

],
),
],
);
}
}


You have

final GoogleMapOverlayController controller;

const MapUiBody(this.controller, GoogleMapController mapController);


where you pass

final GoogleMapOverlayController controller =
GoogleMapOverlayController.fromSize(width: 300.0, height: 200.0);
final Widget mapWidget = GoogleMapOverlay(controller: controller);

...

body: MapUiBody(mapWidget, controller.mapController),


where mapWidget is passed to final GoogleMapOverlayController controller; which is not a Widget.
controller.mapController is probably a GoogleMapController as expected by const MapUiBody(..., GoogleMapController mapController);
but it seems redundant to pass that because you can get it from controller passed to mapWidget anyway.

It's not clear from your code what your intentions are.

Why do you want to pass mapWidget? What should happen with it in MapUiBody?

Comments

Popular posts from this blog

Meaning of `{}` for return expression

Get current scroll position of ScrollView in React Native

flutter websocket connection issue