登录的用户无法转到主页(颤振)

时间:2020-10-09 21:02:18

标签: flutter dart

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

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

”错误:在此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);
}

}

1 个答案:

答案 0 :(得分:0)

您应该在每个页面中获得当前用户。并且由于您返回的是Passerelle并且以MaterialPageRoute的身份登录,因此您应该在此页面中检查当前用户。