import 'dart:async'; import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import '../services.dart'; import 'package:geolocator/geolocator.dart'; class MapView extends StatefulWidget { @override State createState() => MapViewState(); } class MapViewState extends State { Completer _controller = Completer(); MenuiServices services = new MenuiServices(); Position position; Future> createMarkers() async { Map markers = {}; Position position = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high); setState(() { position = position; }); print('position is set'); /* List restaurants = await services.fetchRestaurantsByLocation( position.latitude, position.longitude, 1000); */ List restaurants = await services.fetchRestaurantsByLocation(20.60912, 52.87728); if (restaurants.isNotEmpty) { for (Restaurant thisRestaurant in restaurants) { final MarkerId markerId = MarkerId(thisRestaurant.name); print(thisRestaurant.name); final Marker marker = Marker( markerId: markerId, position: LatLng( thisRestaurant.coordinates[0], thisRestaurant.coordinates[1]), infoWindow: InfoWindow( title: '${thisRestaurant.name}', snippet: 'Kuchnia: ${thisRestaurant.type}')); markers[markerId] = marker; } } return markers; } @override Widget build(BuildContext context) { return Scaffold( body: FutureBuilder>( future: createMarkers(), builder: (BuildContext context, AsyncSnapshot> snapshot) { Map markers = snapshot.data; List children; if (snapshot.hasData) { final CameraPosition _initialPosition = CameraPosition( target: LatLng(20, 58), zoom: 16, ); children = [ GoogleMap( mapType: MapType.normal, initialCameraPosition: _initialPosition, onMapCreated: (GoogleMapController controller) { _controller.complete(controller); }, markers: Set.of(markers.values), ), ]; } else if (snapshot.hasError) { children = [Text('error')]; } else { children = [ SizedBox( child: CircularProgressIndicator(), width: 60, height: 60, ), Padding( padding: EdgeInsets.only(top: 16), child: Text('Awaiting result...'), ) ]; } return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: children, ), ); }, ), floatingActionButton: Padding( padding: EdgeInsets.only(bottom: 20), child: FloatingActionButton( backgroundColor: Colors.grey[800], onPressed: () { Navigator.pop(context); }, child: Icon( Icons.arrow_back_outlined, color: Colors.orange, ), ), ), floatingActionButtonLocation: FloatingActionButtonLocation.startDocked, ); } }