diff options
Diffstat (limited to 'lib/screens/map_screen.dart')
-rw-r--r-- | lib/screens/map_screen.dart | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/screens/map_screen.dart b/lib/screens/map_screen.dart new file mode 100644 index 0000000..db224e4 --- /dev/null +++ b/lib/screens/map_screen.dart @@ -0,0 +1,85 @@ +import 'dart:async'; + +import 'package:circular_menu/circular_menu.dart'; +import 'package:flutter/material.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; + +class MapSample extends StatefulWidget { + const MapSample({super.key}); + + @override + State<MapSample> createState() => MapSampleState(); +} + +class MapSampleState extends State<MapSample> { + // MapType tipoMapa = MapType.normal; + ValueNotifier<MapType> tipoMapa = ValueNotifier(MapType.normal); + + final Completer<GoogleMapController> _controller = + Completer<GoogleMapController>(); + + static const CameraPosition _kGooglePlex = CameraPosition( + target: LatLng(37.42796133580664, -122.085749655962), + zoom: 14.4746, + ); + + static const CameraPosition _kLake = CameraPosition( + bearing: 192.8334901395799, + target: LatLng(37.43296265331129, -122.08832357078792), + tilt: 59.440717697143555, + zoom: 19.151926040649414); + + CircularMenu circularMenu() => CircularMenu(items: [ + CircularMenuItem( + icon: Icons.map, + onTap: () { + tipoMapa.value = MapType.normal; + }, + ), + CircularMenuItem( + icon: Icons.satellite, + onTap: () { + tipoMapa.value = MapType.satellite; + }, + ), + CircularMenuItem( + icon: Icons.terrain, + onTap: () { + tipoMapa.value = MapType.terrain; + }, + ), + CircularMenuItem( + icon: Icons.star, + onTap: () { + tipoMapa.value = MapType.hybrid; + }, + ), + ]); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: ValueListenableBuilder( + valueListenable: tipoMapa, + builder: (context, value, child) => GoogleMap( + mapType: value, + initialCameraPosition: _kGooglePlex, + onMapCreated: (GoogleMapController controller) { + _controller.complete(controller); + }, + ), + ), + // floatingActionButton: FloatingActionButton.extended( + // onPressed: _goToTheLake, + // label: const Text('To the lake!'), + // icon: const Icon(Icons.directions_boat), + // ), + floatingActionButton: circularMenu(), + ); + } + + Future<void> _goToTheLake() async { + final GoogleMapController controller = await _controller.future; + controller.animateCamera(CameraUpdate.newCameraPosition(_kLake)); + } +} |