![](/img/trans.png)
[英]In flutter how to navigate to specific home page based on the type of user logged in?
[英]Logged in user doesn't go to the home page (flutter)
它可以很簡單,但我是初學者,我不明白我的錯誤,我想讓已經創建帳戶的用戶直接進入主頁......
當我啟動調試時,它告訴:
“錯誤:無法在此 Passerelle 小部件上方找到正確的提供者
這可能是因為您使用了不包含您選擇的提供程序的BuildContext
。 有幾種常見的場景:
您嘗試讀取的提供程序位於不同的路徑中。
提供者是“有范圍的”。 因此,如果您在路由中插入提供者,則其他路由將無法訪問該提供者。
您使用了一個BuildContext
,它是您嘗試讀取的提供程序的祖先。
確保 Passerelle 在您的 MultiProvider/Provider 下。 這通常發生在您創建提供程序並嘗試立即讀取它時。”
這是我的代碼,謝謝你的幫助
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:provider/provider.dart';
import 'package:dogos/HomePage.dart';
import 'package:dogos/pageAuth/inscription.dart';
class Utilisateur {
String idUtil;
Utilisateur({ this.idUtil });
}
class DonneesUtil {
String email;
String nomComplet;
DonneesUtil({ this.email, this.nomComplet });
}
class StreamProviderAuth {
final FirebaseAuth _auth = FirebaseAuth.instance;
//creation d'un obj utilisateur provenant de la classe firebaseUser
Utilisateur _utilisateurDeFirebaseUser(FirebaseUser user){
return user != null ? Utilisateur(idUtil: user.uid) : null;
}
//la difussion de l'auth de l'utilisateur
Stream<Utilisateur> get utilisateur {
return _auth.onAuthStateChanged.map(_utilisateurDeFirebaseUser);
}
}
class Passerelle extends StatefulWidget {
@override
_PasserelleState createState() => _PasserelleState();
}
class _PasserelleState extends State<Passerelle> {
@override
Widget build(BuildContext context) {
final utilisateur = Provider.of<Utilisateur>(context);
if (utilisateur == null) {
return Inscription();
} else {
return HomePage();
}
}
}
class IntroductionPage extends StatefulWidget {
@override
_IntroductionPageState createState() => _IntroductionPageState();
}
class _IntroductionPageState extends State<IntroductionPage> {
FirebaseAuth _auth = FirebaseAuth.instance;
FirebaseUser currentUser;
getCurrentUser() async {
currentUser = await _auth.currentUser();
print("from get getCurrent user ${currentUser.email}");
}
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
Future.delayed(const Duration(milliseconds: 1000), () {
Navigator.push(context,
MaterialPageRoute(builder: (BuildContext context) => Passerelle()));
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
Expanded (
child: Container(
color: Colors.blue,
alignment: Alignment.center,
),
),
Container(
child: Image.asset("assets/logo.jpg"),
),
Expanded (
child:Container(
color: Color(0xff3b57fe),
alignment: Alignment.center,
),
),
],
),
);
}
}
class GetCurrentUserData {
String idUtil;
GetCurrentUserData({ this.idUtil });
//la reference de la collection utilisateur
final CollectionReference collectionUtil = Firestore.instance.collection('utilisateurs');
DonneesUtil _donneesUtilDeSnapshot(DocumentSnapshot snapshot){
return DonneesUtil(
nomComplet: snapshot['nomComplet'],
email: snapshot['emailUtil'],
);
}
//obtention doc util en Stream
Stream<DonneesUtil> get donneesUtil {
return collectionUtil.document(idUtil).snapshots()
.map(_donneesUtilDeSnapshot);
}
}
您應該在每個頁面中獲取當前用戶。 並且由於您要返回Passerelle
並作為MaterialPageRoute
返回,因此您應該檢查此頁面內的當前用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.