这很简单,但是我是一个初学者,我不明白我的错误,我想让已经创建帐户的用户直接进入主页...
当我启动调试时,它告诉:
”错误:在此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);
}
}
答案 0 :(得分:0)
您应该在每个页面中获得当前用户。并且由于您返回的是Passerelle
并且以MaterialPageRoute
的身份登录,因此您应该在此页面中检查当前用户。