J'utilise les packages Geolocator et Google Maps de Flutter pour déterminer l'emplacement d'un appareil. J'utilise la barre de progression circulaire pour attendre que la position actuelle soit déterminée. Une fois l'emplacement déterminé, Google Maps se charge avec l'emplacement de l'appareil identifié.
Lorsque l'application se charge, la barre de progression circulaire s'affiche mais la carte n'est pas chargée malgré l'affichage de la notification et l'acceptation de l'utilisation des services de localisation ; l'application se bloque sur la barre de progression circulaire. Je ne pense pas qu'il s'agisse d'un problème d'API car j'ai réussi à charger la carte avec les coordonnées spécifiées dans InitialCameraPosition.
L'emplacement de l'appareil n'est-il pas déterminé, ce qui fait que la carte ne se charge pas avec l'emplacement indiqué ?
J'ai essayé d'exécuter l'application à la fois sur un émulateur Android et sur un appareil physique, sans succès.
Android Manifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="smartkart.app.com.coffee">
<!-- io.flutter.app.FlutterApplication is an android.app.Application
that
calls FlutterMain.startInitialization(this); in its onCreate
method.
In most cases you can leave this as-is, but you if you want to
provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:name="io.flutter.app.FlutterApplication"
android:label="coffee"
android:icon="@mipmap/ic_launcher">
<meta-data android:name="com.google.android.geo.API_KEY"
android:value="API KEY HERE"/>
<activity../>
Maps Screen
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';
class FirstScreen extends StatefulWidget {
const FirstScreen({Key key}) : super(key: key);
@override
State<FirstScreen> createState() => _FirstScreen();
}
class _FirstScreen extends State<FirstScreen> {
GoogleMapController mapController;
var currentLocation;
@override
void initState(){
super.initState();
Geolocator().getCurrentPosition().then((currloc){
currentLocation = currloc;
});
}
@override
Widget build(BuildContext context) {
return currentLocation == null ? Container(
alignment: Alignment.center,
child: Center(
child: CircularProgressIndicator(),
),
):
Stack(
children: <Widget>[
GoogleMap(
initialCameraPosition:
CameraPosition(target: LatLng(currentLocation.latitude,
currentLocation.longitude), zoom: 10),
onMapCreated: _onMapCreated,
myLocationEnabled: true,
mapType: MapType.normal,
),
],
);
}
void _onMapCreated(GoogleMapController controller) {
setState(() {
mapController = controller;
});
}
}
Je m'attends à ce que la notification d'utilisation des services de localisation s'affiche pendant que la barre de progression circulaire est affichée. Une fois l'emplacement déterminé, InitialCameraPosition affiche l'emplacement de l'appareil sur la carte.