J'utilisais l'api de google maps et l'emplacement pub, le package de développement dans mon application Android Flutter, et j'ai essayé d'afficher une image en utilisant l'URL de l'API. C'était l'URL avec du code:
Future <String> _getUserLocation() async{ final locData = await Location().getLocation(); final staticMapUrl = LocationHelper.mapviewpointer( latitude: locData.latitude, longitude: locData.longitude, ); return staticMapUrl; } final mapview = _getUserLocation(); class NearbyScreen extends StatelessWidget { @override //LocationHelper.mapviewpointer(latitude: ) Widget build(BuildContext context) { return Column( children: <Widget>[ Container(height:170, width: double.infinity, child:Image.network(mapview.toString()) ), Text("hello"), ], ); } }
il a jeté le message d'erreur suivant:
Plugin project :location_web not found. Please update settings.gradle;
Je ne sais pas comment corriger cette erreur.
C'était l'autre erreur que j'ai reçue dans mon terminal:
I/flutter (21880): Invalid argument(s): No host specified in URI file:///Instance%20of%20'Future%3CString%3E'
La zone dans laquelle je reçois le message d'erreur ci-dessus est ici dans mon code:
class LocationHelper{ static String mapviewpointer({double latitude, double longitude}){ return "https://maps.googleapis.com/maps/api/staticmap?center=$latitude,$longitude&zoom=13&size=600x300&maptype=roadmap&markers=color:pink%7Clabel:C%7C$latitude,$longitude&key=$GOOGLE_API_KEY"; } }
Cela a-t-il quelque chose à voir avec le fait que je renvoie un Future<String>
au lieu d'une simple string
dans ma fonction _getUserlocation
? Comment pourrais-je résoudre ce problème?
3 Réponses :
Utilisez les settings.gradle
suivants:
include ':app' def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() def plugins = new Properties() def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') if (pluginsFile.exists()) { pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } } plugins.each { name, path -> def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() include ":$name" project(":$name").projectDir = pluginDirectory }
Cela créera un fichier .flutter-plugin
qui aura le plugin et son chemin.
Merci beaucoup! Cependant, j'obtiens toujours ce message d'erreur en essayant d'afficher l'image de la carte: "I / flutter (10600): L'argumentError suivant a été lancé pour résoudre un codec d'image: I / flutter (10600): Argument (s) non valide (s): Aucun hôte spécifié dans Fichier URI: /// Instance% 20of% 20'Future% 3CString% 3E '"Quel serait le problème ici?
Où obtenez-vous cette erreur sur quelle ligne de votre code? Ou après quoi?
J'ai mis à jour la question avec plus d'informations, j'espère que cela vous aidera! Merci encore
getUserLocation()
renvoie un Future<String>
tandis que Image.network
besoin d'une URL. Par conséquent, la meilleure chose est d'utiliser FutureBuilder
et à l'intérieur d'appeler Image.network
image
Pourquoi cette erreur se produit-elle? Que fait ce script?
Je n'ai pas essayé ce plugin depuis un moment, essayez d'utiliser la dernière version, cela ne devrait plus arriver, pour savoir pourquoi cela se produit, vérifiez celui-ci ici stackoverflow.com/questions/61732409/... @Ced
C'était l'ancien settings.gradle lorsque vous créez une application Flutter, puis Flutter a changé les settings.gradle et certains plugins avaient besoin de l'ancien script pour fonctionner correctement, c'est pourquoi vous obtenez cette erreur.
J'ai eu le même problème et après la réponse de @Peter Haddad, j'ai copié et remplacé le code dans settings.gradle (tout cela) et j'ai eu des erreurs de résolution du symbole pour les propriétés et le fichier.
POUR LE RÉPARER: allez dans Outils -> Flutter -> Ouvrir pour édition dans Android Studio
Dans la fenêtre Android Studio, allez dans Fichier -> Invalider le cache et redémarrer
Cela a semblé résoudre le problème pour moi.
Il n'est pas nécessaire d'ouvrir Android Studio pour nettoyer le cache, utilisez ce qui suit dans le terminal: flutter clean
ajoutez votre application Flutter -> android -> settings.gradle
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() def plugins = new Properties() def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') if (pluginsFile.exists()) { pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } } plugins.each { name, path -> def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() include ":$name" project(":$name").projectDir = pluginDirectory }
comme vu ici
plus d'informations sur le problème ici
Pourriez-vous montrer votre
pubspec.yaml
?