J'essaye de récupérer un UID de Firebase et de le renvoyer à une variable. Cependant, je suis incapable de le faire fonctionner. Quelqu'un pourrait-il s'il vous plaît aider à ce sujet. Merci
getUID() async { final userId = await widget.auth.getCurrentUser(); print('checking user id ${userId.uid}'); return userId.uid; } @override void initState() { super.initState(); void foo() async { final userID = await getUID(); print("UID is ${userID}"); } foo(); print("UID is ${userID}"); }
3 Réponses :
Le problème que vous rencontrez est la portée . Vous déclarez userId
dans la fonction interne foo
, de sorte que la variable n'existe pas en dehors de foo
. Si vous souhaitez y accéder dans la portée de initState
, vous devez le déclarer dans cette portée:
@override void initState() { super.initState(); String userId; void foo() async { userID = await getUID(); print("UID is ${userID}"); } foo(); print("UID is ${userID}"); }
Après avoir appelé la fonction foo () et essayé de l'imprimer, elle apparaît comme "UID est nul". Bien qu'à l'intérieur de la fonction foo, la valeur est imprimée, mais impossible de la récupérer à l'extérieur.
@RaghuCK Le problème est que foo
est marqué comme async
, mais lorsque vous appelez foo
, vous ne l' await
pas. Cela oblige initState
à le dépasser sans attendre les résultats. Normalement, je dirais simplement que initState
asynchrone, mais dans ce cas, Flutter ne vous permettra pas de le faire car toutes les fonctions async
renvoient Future
et initState
doit retourner void
.
Merci. Pourriez-vous s'il vous plaît aider à obtenir la valeur de l'ID utilisateur dans une variable afin que je puisse passer à d'autres pages. Ou bien faites-moi savoir comment obtenir l'uid d'un utilisateur depuis Firebase.
@RaghuCK Mettez-le dans une fonction distincte que vous pouvez marquer comme async
. Ensuite, vous pouvez await
sur foo
et définir le résultat sur une variable que vous voulez. Bien que dans cette situation, foo
est la fonction séparée et l'ID utilisateur provient vraiment de getUID
.
Déclarez cela en dehors de chaque classe
class RootPage extends StatefulWidget { @override State<StatefulWidget> createState() => new _RootPageState(); } class _RootPageState extends State<RootPage> { String _userId; @override void initState() { super.initState(); _userId=getCurrentUser(); } @override Widget build(BuildContext context) { return Text(_userId==null?"NO User Logged In":_userId); }
et la classe dans laquelle vous l'utilisez devrait être
String getCurrentUser(){ return FirebaseAuth.instance.currentUser; }
Notez également qu'avec la dernière version de firebaseauth, cette fonction ne renvoie plus de futur;
@override void initState() { super.initState(); getCurrentUser(); // The code to get the currrent user is run in the initState and user UID stored in the 'userId' variable }
Définissez «impossible de le faire fonctionner», quelles erreurs obtenez-vous? Sur quelle ligne ces erreurs se produisent-elles? Que se passe-t-il lorsque vous effectuez une inspection à l'aide d'un débogueur?
Toutes mes excuses. Lorsque j'essaie de l'imprimer comme showin dans la dernière ligne, il est dit que l'ID utilisateur n'est pas défini. J'ai besoin d'obtenir la valeur en dehors de la fonction foo pour la transmettre à d'autres pages.
veuillez ajouter le code de getcurrentuser
Ceci est le code de getCurrentUser du fichier auth.dart Future <FirebaseUser> getCurrentUser () async {FirebaseUser user = wait _firebaseAuth.currentUser (); retour utilisateur; }
Répondu, commentez si quelque chose ne va pas