簡體   English   中英

登錄用戶不去首頁(flutter)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM