登录后未导航到主页

时间:2021-07-31 07:43:35

标签: firebase flutter dart

我正在学习 Youtube 的教程。当我顺其自然时,一切正常,但是当我添加代码时,它会出错。 当用户在注销后第一次登录时,它会停留在登录页面并且不会导航到主页。但是当我们再次关闭并打开应用程序时,它会将用户带到主页面。请帮我解决这个问题,我用谷歌搜索了它,我在 fb 组中提问,但找不到解决方案。 这是我的代码。 来自 auth.dart 文件

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:twitter_clone/models/user.dart';

class AuthService {
  FirebaseAuth auth = FirebaseAuth.instance;

  UserModel _userFromFirebaseUser(User user) {
    return user != null ? UserModel(id: user.uid) : null;
  }

  Stream<UserModel> get user {
    return auth.authStateChanges().map(_userFromFirebaseUser);
  }

  Future signUp(email, password) async {
    try {
      UserCredential user = await auth.createUserWithEmailAndPassword(
          email: email, password: password);

      await FirebaseFirestore.instance
          .collection('users')
          .doc(user.user.uid)
          .set({'name': email, 'email': email});
      _userFromFirebaseUser(user.user);
    } on FirebaseAuthException catch (e) {
      if (e.code == 'weak-password') {
        
        print('The password provided is too weak.');
      } else if (e.code == 'email-already-in-use') {
        print('The account already exists for that email.');
      }
    } catch (e) {
      print(e);
    }
  }

  Future signIn(email, password) async {
    try {
      User user = (await auth.signInWithEmailAndPassword(
          email: email, password: password)) as User;

      _userFromFirebaseUser(user);
    } on FirebaseAuthException catch (e) {
      print(e);
    } catch (e) {
      print(e);
    }
  }

  Future signOut() async {
    try {
      return await auth.signOut();
    } catch (e) {
      print(e.toString());
      return null;
    }
  }
}

来自 Signin.dart 文件

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:twitter_clone/screens/auth/signup.dart';
import 'package:twitter_clone/services/auth.dart';
import 'package:twitter_clone/utilities/constants.dart';

class SignIn extends StatefulWidget {
  SignIn({Key key}) : super(key: key);
  @override
  _SignInState createState() => _SignInState();
}

class _SignInState extends State<SignIn> {
  final AuthService _authService = AuthService();
  
  
  ///variables to store email and password
  String email = '';
  String password = '';
  bool _rememberMe = false;
 Widget _buildLoginBtn() {
    return Container(
      padding: EdgeInsets.symmetric(vertical: 25.0),
      width: double.infinity,
      child: ElevatedButton(
        // elevation: 5.0,
        onPressed:() 
         async => 
          {
           _authService.signIn(email, password)
          },
        // padding: EdgeInsets.all(15.0),
        // shape: RoundedRectangleBorder(
        //   borderRadius: BorderRadius.circular(30.0),
        // ),
        // color: Colors.white,
        child: Text(
          'LOGIN',
          style: TextStyle(
            color: Color(0xFF527DAA),
            letterSpacing: 1.5,
            fontSize: 18.0,
            fontWeight: FontWeight.bold,
            fontFamily: 'OpenSans',
          ),
        ),
      ),
    );
  }

0 个答案:

没有答案