【问题标题】:Why is Firebase not signing me out?为什么 Firebase 不让我退出?
【发布时间】:2021-07-06 04:19:32
【问题描述】:

问题

所以我正在尝试使用 Firebase 创建一个颤振应用程序,我正在关注本教程系列:
https://www.youtube.com/playlist?list=PL4cUxeGkcC9j--TKIdkb3ISfRbJeJYQwC

我正在观看此视频:
https://www.youtube.com/watch?v=v3sY3RWciNw&list=PL4cUxeGkcC9j--TKIdkb3ISfRbJeJYQwC&index=10

每当我运行我的代码并单击调试控制台中出现的退出按钮时:

D/FirebaseAuth( 6371): Notifying id token listeners about a sign-out event. 
D/FirebaseAuth( 6371): Notifying auth state listeners about a sign-out event.

我没有按我应该的方式被发送到登录屏幕。

这是您退出页面的代码:

import 'package:flutter/material.dart';
import 'package:my_planner/services/auth.dart';

class SettingsPage extends StatefulWidget {
  @override
  _SettingsPageState createState() => _SettingsPageState();
}

class _SettingsPageState extends State<SettingsPage> {

  final AuthService _auth = AuthService();

  @override
  Widget build(BuildContext context) {
    return Scaffold(

      appBar: AppBar(
        
        backgroundColor: Colors.indigoAccent,

        elevation: 10.0,

        actions: [
          IconButton(
            onPressed: () {
              Navigator.pop(context);
            },
            iconSize: 35.0,
            icon: Icon(
                Icons.arrow_back
            ),
          )
        ],

        leading: Icon(
          Icons.settings,
          size: 35.0,
        ),

        title: Text(
          "Settings",
          style: TextStyle(
            fontSize: 30.0,
            fontFamily: "Nunito",
          ),
        ),

      ),

      body: Padding(
        padding: const EdgeInsets.all(10.0),
        child: Align(
          alignment: Alignment.topCenter,
          child: Column(
            children: [

              MaterialButton(
                padding: EdgeInsets.symmetric(horizontal: 30.0, vertical: 20.0),
                splashColor: Colors.indigoAccent[700],
                onPressed: () async {
                  await _auth.signOut();
                },
                color: Colors.indigoAccent,
                shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)),
                child: Text(
                  "Sign out",
                  style: TextStyle(
                    color: Colors.white,
                    fontSize: 25.0
                  ),
                ),
              )

            ],
          ),
        ),
      ),

    );
  }
}

这些是代码使用的其他文件:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:my_planner/models/user.dart';

class AuthService {

  final FirebaseAuth _auth = FirebaseAuth.instance;

  //create user object based on firebase user
  MyUser _userFromFirebaseUser(User user) {
    return user != null ? MyUser(uid: user.uid) : null;
  }

  // auth change user stream
  Stream <MyUser> get user {
    return _auth.authStateChanges()
      .map(_userFromFirebaseUser);
  }

  // sign in anon
  Future signInAnon() async {
    try {
      UserCredential result = await _auth.signInAnonymously();
      User user = result.user;
      return _userFromFirebaseUser(user);
    }
    catch (e) {
      print(e.toString());
      return null;
    }
  }
  
  // sign in with email and password
  
  // register with email and password
  
  // sign out
  Future signOut() async {

    try {
      return await _auth.signOut();
    } catch (e) {
      print(e.toString());
      return null;
    }

  }

}

class MyUser {

  final String uid;

  MyUser({this.uid});

}

我们将不胜感激。

【问题讨论】:

  • Firebase 身份验证正在向您发出声音,这是您不知道的应用程序。两种方法 - 在身份验证状态上实现监听器,或者只是在注销成功时开始导航到登录页面。

标签: android firebase flutter dart firebase-authentication


【解决方案1】:

此帖已关闭

所以这个“错误”是由于我有一个带有退出按钮的设置页面造成的。此设置页面是通过主页访问的。因此,当调用注销时,流尝试将身份验证页面作为根小部件返回,这是不可能的,因为设置页面堆叠在顶部。这意味着它不会将您带到身份验证页面。

为了解决这个问题,我只是在调用signOut() 之前放置了一个Navigator.pop() 语句,以便它导航到主页并可以将根小部件切换到身份验证页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2020-07-17
    相关资源
    最近更新 更多