Problème de retour d’argument d’une fonction async

Bonjour à tous.
Je suis débutant en Flutter et Dart
j’ai un problème pour afficher sur l’écran de mon smartphone une valeur calculée dans une fonction de type async via l’instruction return0
Je pensais qu’il suffisait de déclarer ma fonction
Future _getCurrentLocation() async {
Et de retournrner la valeur calculée dans la fonction d.
return Text( « LAT: ${currentPosition.latitude}, LNG: ${currentPosition.longitude} ») ;

Mais ça ne marche pas !!!
Dans mon application j’utilise le plugin Geolocator pour afficher ma position GPS quand j’appuie sur le bouton « Trouver ma position ».
Le code se compile normalement et à l’exécution, après la demande d’autorisation d’accéder à la localisation, la commande print me donne bien ma position mais sur la console d’Android Studio mais je n’ai rien sur mon écran. Voici mon code :
Main.dart
import ‹ package:flutter/material.dart ›;
import ‹ home_page.dart ›;

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: ‹ Flutter Demo ›,
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: HomePage(),
);
}

home_page.dart
import ‹ package:flutter/material.dart ›;
import ‹ package:geolocator/geolocator.dart ›;

class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}

class _HomePageState extends State {

@override
Widget build(BuildContext context) {
Position currentPosition;
return Scaffold(
appBar: AppBar(
title: Text(« Localisation »),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [

        TextButton(
          child: Text("Trouver ma position"),
          onPressed: () =>   _getCurrentLocation()
         ),


       // if (currentPosition != null) Text(                "LAT: ${currentPosition.latitude}, LNG: ${currentPosition.longitude}"    ),
  ],
    ),
  ),
);

}

Future _getCurrentLocation() async {
bool isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled();

await Geolocator.checkPermission();
await Geolocator.requestPermission();

Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
Position currentPosition =  position;

;
print( « LAT: ${currentPosition.latitude}, LNG: ${currentPosition.longitude} ») ;
return Text( « LAT: ${currentPosition.latitude}, LNG: ${currentPosition.longitude} ») ;
}
}

Merci d’avance pour vos conseils pour résoudre ce problème. Amicalement.
Pépé Michel

Salut,

Est-ce que dans ton _getCurrentLocation tu fais un setState ?

Merci pour ton excente ramarque !*Ma fonction n’avait pas de setstate.
Je l’ai modifiée comme suit
void _getCurrentLocation() async {
bool isLocationServiceEnabled = await Geolocator.isLocationServiceEnabled();
await Geolocator.checkPermission();
await Geolocator.requestPermission();

Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
setState(() {
      Position currentPosition =  position;



//print(  "LAT: ${currentPosition.latitude}, LNG: ${currentPosition.longitude}") ;

    Text(  "LAT: ${currentPosition.latitude}, LNG: ${currentPosition.longitude}") ;
});

}:

mais ça ne change rien car le widget Tex() n’apparaît pas!!
Merci de votre aide
Pépé Michel

J’ai résolu mon problème. Je m’étais bien compliqué la vie car il suffisait de reprendre l’exemple de code Flutter quand on démarre un nouveau projet Flutteret de modifier la fonction l’incrémentation pour l’adapter à la recherche de ma position avec Geolocator, et tout fonctionne !
Merci pour votre aide.
Pépé Michel

1 J'aime