Flutter 登录用户不使用';不要进入主页(颤振)

Flutter 登录用户不使用';不要进入主页(颤振),flutter,dart,Flutter,Dart,它可以很简单,但我是一个初学者,我不明白我的错误,我想让我的用户已经创建了一个帐户直接进入主页 启动调试时,它会告诉我: 错误:在此Passelle小部件上方找不到正确的提供程序 这可能是因为您使用了不包含提供程序的BuildContext 由您选择。有几种常见情况: 您试图读取的提供程序位于不同的路径中 提供者是“范围化”的。因此,如果在路由中插入提供者,则 其他路由将无法访问该提供商 您使用了一个BuildContext,它是您试图读取的提供程序的祖先 确保Passelle在您的Mult

它可以很简单,但我是一个初学者,我不明白我的错误,我想让我的用户已经创建了一个帐户直接进入主页

启动调试时,它会告诉我:

错误:在此Passelle小部件上方找不到正确的提供程序

这可能是因为您使用了不包含提供程序的
BuildContext
由您选择。有几种常见情况:

  • 您试图读取的提供程序位于不同的路径中

    提供者是“范围化”的。因此,如果在路由中插入提供者,则 其他路由将无法访问该提供商

  • 您使用了一个
    BuildContext
    ,它是您试图读取的提供程序的祖先

    确保Passelle在您的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);
}

}

import'package:firebase_auth/firebase_auth.dart';
进口“包装:颤振/材料.省道”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“包:provider/provider.dart”;
导入“包:dogos/HomePage.dart”;
导入“package:dogos/pageAuth/edinting.dart”;
阶级利用者{
字符串idUtil;
利用率({this.idUtil});
}
唐尼苏蒂尔班{
字符串电子邮件;
字符串完成;
DonneesUtil({this.email,this.nomplett});
}
类StreamProviderAuth{
final FirebaseAuth _auth=FirebaseAuth.instance;
//利用firebaseUser火种源创建obj
利用者(aussilateurdefirebaseuser)(FirebaseUser){
返回用户!=null?使用用户(idUtil:user.uid):null;
}
//使用授权书
溪流得到利用{
返回_auth.onAuthStateChanged.map(_使用UrdeFireBaseUser);
}
}
类Passerle扩展了StatefulWidget{
@凌驾
_PasserelleState createState()=>\u PasserelleState();
}
类_状态扩展状态{
@凌驾
小部件构建(构建上下文){
最终使用人=提供人(上下文);
如果(利用率==null){
返回铭文();
}否则{
返回主页();
}
}
}
类介绍页扩展StatefulWidget{
@凌驾
_IntroductionPageState createState()=>\u IntroductionPageState();
}
类_IntroductionPageState扩展状态{
FirebaseAuth _auth=FirebaseAuth.instance;
FirebaseUser当前用户;
getCurrentUser()异步{
currentUser=wait_auth.currentUser();
打印(“从get getCurrent user${currentUser.email}”);
}
void initState(){
super.initState();
WidgetsBinding.instance.addPostFrameCallback(())异步{
未来延迟(常量持续时间(毫秒:1000),(){
Navigator.push(上下文,
MaterialPackageRoute(生成器:(BuildContext上下文)=>Passelle());
});
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:专栏(
儿童:[
扩大(
子:容器(
颜色:颜色,蓝色,
对齐:对齐.center,
),
),
容器(
子项:Image.asset(“assets/logo.jpg”),
),
扩大(
子:容器(
颜色:颜色(0xff3b57fe),
对齐:对齐.center,
),
),
],
),
);
}
}
类GetCurrentUserData{
字符串idUtil;
GetCurrentUserData({this.idUtil});
//收集利用率参考值
final CollectionReference collectionUtil=Firestore.instance.collection('UsiliateUrs');
DonneesUtil_donneesUtilDeSnapshot(文档快照快照){
返回唐尼苏蒂尔(
NomComplete:snapshot['NomComplete'],
电子邮件:快照['emailUtil'],
);
}
//流中的获取文档
流得到唐尼苏蒂尔{
return collectionUtil.document(idUtil.snapshots())
.地图(_donneesUtilDeSnapshot);
}
}

您应该在每个页面中获取当前用户。由于您返回的是
Passerelle
MaterialPageRoute
,因此您应该检查此页面中的当前用户。

您应该在每个页面中获得当前用户。既然您返回的是
Passerelle
materialpage
,那么您应该检查此页面中的当前用户。

我该怎么做?我必须在代码中添加什么?是的,你必须添加代码。。。等待FirebaseUser user=FirebaseAuth.instance.currentUser();然后检查用户是否不为空,然后用户已登录,以便您可以将任何屏幕推到我必须添加此代码的位置?(我真的是一个初学者,我不理解我使用的所有代码)尝试将其添加到if语句之上。。在if语句中,检查user.I的值替换为final-usilizateur=Provider.of(上下文);最终利用率ur=FirebaseAuth.instance.currentUser();(Usilisateur是用户的法国世界)即使没有创建帐户,它也会直接进入主页,也许我不明白你对我说了什么,你能确切地告诉我我必须做什么吗?非常感谢你,我怎么能做到?我必须在代码中添加什么?是的,你必须添加代码。。。等待FirebaseUser user=FirebaseAuth.instance.currentUser();然后检查用户是否不为空,然后用户已登录,以便您可以将任何屏幕推到我必须添加此代码的位置?(我真的是一个初学者,我不理解我使用的所有代码)尝试将其添加到if语句之上。。在if语句中,检查user.I的值替换为final-usilizateur=Provider.of(上下文);最终利用率ur=FirebaseAuth.instance.currentUser();(Usilisateur是用户的法国世界)即使没有创建帐户,它也会直接进入主页,也许我不明白你对我说了什么,你能确切地告诉我我必须做什么吗?多谢各位