Home > database >  how i can use google map to get current location or choose location?
how i can use google map to get current location or choose location?

Time:03-06

i start with this code but all what i get white screen

import 'dart:async'; import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Google Maps Demo', home: MapSample(), ); } }

class MapSample extends StatefulWidget { @override
State createState() => MapSampleState(); }

class MapSampleState extends State {
Completer _controller = Completer();

static final CameraPosition _kGooglePlex = CameraPosition( target: LatLng(37.42796133580664, -122.085749655962), zoom: 14.4746, );

static final CameraPosition _kLake = CameraPosition( bearing: 192.8334901395799, target: LatLng(37.43296265331129, -122.08832357078792), tilt: 59.440717697143555, zoom: 19.151926040649414);

@override Widget build(BuildContext context) { return new Scaffold( body: GoogleMap( mapType: MapType.hybrid, initialCameraPosition: _kGooglePlex, onMapCreated: (GoogleMapController controller) { _controller.complete(controller); }, ), floatingActionButton: FloatingActionButton.extended( onPressed: _goToTheLake, label: Text('To the lake!'), icon: Icon(Icons.directions_boat), ), ); }

Future _goToTheLake() async { final GoogleMapController controller = await _controller.future; controller.animateCamera(CameraUpdate.newCameraPosition(_kLake)); } }

CodePudding user response:

If you're using Url properly(no spelling/parameter mistakes) with API key and there's no error from the server which happens a lot due to restrictions. Then there are other steps you need to, ask Location permission on app loading using https://pub.dev/packages/permission_handler package like this.

Code can be something like this.

  1. Create an app_persmission_provider file.

    class AppPermissionProvider with ChangeNotifier {
       PermissionStatus _locationStatus = PermissionStatus.denied;
       LatLng? _locationCenter;
    
       final location_package.Location _location = 
       location_package.Location();
    
       location_package.LocationData? _locationData;
    
       // Getter
       get locationStatus => _locationStatus;
       get locationCenter => _locationCenter;
       get location => _location;
    
       void getLocationStatus() async {
         final status = await Permission.location.request();
         _locationStatus = status;
    
         notifyListeners();
         print(_locationStatus);
     }
    
      void getLocation() async {
       _locationData = await _location.getLocation();
       _locationCenter = LatLng(
        _locationData!.latitude as double, _locationData!.longitude as double);
    
      notifyListeners();
      }
    }
    

Then declare the provider on the root maybe, and In my case, I'm initializing some functions onInit. By doing so, android will ask for permission for location when your page loads.

@override void initState() { super.initState();

appPermission = Provider.of<AppPermissionProvider>(context, listen: false);
appPermission.getLocationStatus();
appPermission.getLocation();
}

And then using consumer.

 SafeArea(
        child: Consumer<AppPermissionProvider>(
          builder: (context, appPermissionProvider, _) => appPermission
                      .locationCenter ==
                  null
              ? const Center(child: CircularProgressIndicator())
              : 
                  GoogleMap( myLocationButtonEnabled:
                        appPermissionProvider.locationStatus ==
                                PermissionStatus.granted
                            ? true
                            : false,
                    myLocationEnabled: true,
                    initialCameraPosition: CameraPosition(
                      target: appPermission.locationCenter,
                      zoom: 14,
                    ),
                    onMapCreated: onMapCreated,
                    mapType: MapType.normal,
                    compassEnabled: true,
                  ),
                 ),
        )
      

Here, I am checking if permission is granted, also I am only enabling myLocationButton if location permission is granted.

CodePudding user response:

You can use google_maps_flutter package , A short example how you can use it. For more clearity you can visit Here or you can use geolocator.

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  LatLng _initialcameraposition = LatLng(20.5937, 78.9629);
  GoogleMapController _controller;
  Location _location = Location();

  void _onMapCreated(GoogleMapController _cntlr)
  {
    _controller = _cntlr;
    _location.onLocationChanged.listen((l) { 
      _controller.animateCamera(
        CameraUpdate.newCameraPosition(
          CameraPosition(target: LatLng(l.latitude, l.longitude),zoom: 15),
          ),
      );
    });
  }
  • Related