首页 > 解决方案 > 登录用户不去主页(颤振)

问题描述

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

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

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

这可能是因为您使用了BuildContext不包括 您选择的提供者的 a。有几种常见的场景:

这是我的代码,谢谢你的帮助

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);
}

}

标签: flutterdart

解决方案


您应该在每个页面中获取当前用户。并且由于您要返回PasserelleMaterialPageRoute因此您应该检查此页面内的当前用户。


推荐阅读