Firebase Phone Auth无法注销flutter



我已经尝试了从firebase auth注销的所有方法。我使用Firebase在Flutter应用程序中使用电话号码验证,但无法注销用户。每次我重新启动应用程序时,它都会引导我进入主页,但当我单击"注销"按钮时,它会将我带到"登录"页面
我想要的只是一个简单的注销。

身份验证类

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:food_express/pages/login_signup/login.dart';
class Authentication{
Future<void> logOut(BuildContext context) async {
try {
await FirebaseAuth.instance.signOut().then((value) => {
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => Login()), (route) => false)
});
} catch (e) {
print(e); // TODO: show dialog with error
}
}
}

配置文件小工具

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:food_express/constant/constant.dart';
import 'package:food_express/functions/Authentication.dart';
import 'package:food_express/pages/login_signup/login.dart';
import 'package:food_express/pages/order/history_order/history.dart';
import 'package:food_express/pages/order/order.dart';
import 'package:food_express/pages/profile/edit_profile.dart';
import 'package:page_transition/page_transition.dart';
import 'package:food_express/pages/profile/address.dart';
import 'package:food_express/pages/notification.dart';
import "../../constant/globals.dart" as global;
class Profile extends StatelessWidget {
@override
Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width;
logoutDialogue() {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
// return object of type Dialog
return Dialog(
elevation: 0.0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0)),
child: Container(
height: 130.0,
padding: EdgeInsets.all(20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
"You sure want to logout?",
style: headingStyle,
),
SizedBox(
height: 20.0,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
InkWell(
onTap: () {
logout(context);
},
child: Container(
width: (width / 3.5),
alignment: Alignment.center,
padding: EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: Colors.grey[300],
borderRadius: BorderRadius.circular(5.0),
),
child: Text(
'Cancel',
style: buttonBlackTextStyle,
),
),
),
InkWell(
onTap: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => Login()));
},
child: Container(
width: (width / 3.5),
alignment: Alignment.center,
padding: EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: primaryColor,
borderRadius: BorderRadius.circular(5.0),
),
child: Text(
'Log out',
style: wbuttonWhiteTextStyle,
),
),
),
],
),
],
),
),
);
},
);
}
return Scaffold(
backgroundColor: scaffoldBgColor,
appBar: AppBar(
automaticallyImplyLeading: false,
backgroundColor: whiteColor,
elevation: 0.0,
title: Text(
'Profile',
style: bigHeadingStyle,
),
),
body: ListView(
children: <Widget>[
InkWell(
onTap: () {
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child: EditProfile()));
},
child: Container(
width: width,
padding: EdgeInsets.all(fixPadding),
color: whiteColor,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
width: 70.0,
height: 70.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5.0),
image: DecorationImage(
image: NetworkImage(
"https://png.pngtree.com/png-clipart/20200224/original/pngtree-cartoon-color-simple-male-avatar-png-image_5230557.jpg"),
fit: BoxFit.cover,
),
),
),
widthSpace,
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
global.profile.Name.toString(),
style: headingStyle,
),
heightSpace,
Text(
global.profile.PhoneNumber.toString(),
style: lightGreyStyle,
),
],
),
],
),
Icon(
Icons.arrow_forward_ios,
size: 16.0,
color: Colors.grey.withOpacity(0.6),
),
],
),
),
),
Container(
margin: EdgeInsets.all(fixPadding),
padding: EdgeInsets.all(fixPadding),
decoration: BoxDecoration(
color: whiteColor,
borderRadius: BorderRadius.circular(5.0),
boxShadow: <BoxShadow>[
BoxShadow(
blurRadius: 1.5,
spreadRadius: 1.5,
color: Colors.grey[200],
),
],
),
child: Column(
children: <Widget>[
InkWell(
onTap: () {
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child: Notifications()));
},
child: getTile(
Icon(Icons.notifications,
color: Colors.grey.withOpacity(0.6)),
'Notifications'),
),
/* InkWell(
onTap: () {
Navigator.push(context, PageTransition(type: PageTransitionType.rightToLeft, child: PaymentMethods()));
},
child: getTile(
Icon(Icons.payment, color: Colors.grey.withOpacity(0.6)),
'Payment Methods'),
),
*/
/*InkWell(
onTap: () {},
child: getTile(
Icon(Icons.local_activity,
color: Colors.grey.withOpacity(0.6)),
'My Vouchers'),
),
*/
InkWell(
onTap: () {},
child: getTile(
Icon(Icons.group_add,
color: Colors.grey.withOpacity(0.6)),
'Invite Friends'),
),
],
),
),
Container(
margin: EdgeInsets.all(fixPadding),
padding: EdgeInsets.all(fixPadding),
decoration: BoxDecoration(
color: whiteColor,
borderRadius: BorderRadius.circular(5.0),
boxShadow: <BoxShadow>[
BoxShadow(
blurRadius: 1.5,
spreadRadius: 1.5,
color: Colors.grey[200],
),
],
),
child: Column(
children: <Widget>[
InkWell(
onTap: () {
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child: Order()));
},
child: getTile(
Icon(Icons.history, color: Colors.grey.withOpacity(0.6)),
'Order History'),
),
InkWell(
onTap: () {},
child: getTile(
Icon(Icons.group, color: Colors.grey.withOpacity(0.6)),
'Become our partner'),
),
InkWell(
onTap: () {},
child: getTile(
Icon(Icons.headset_mic,
color: Colors.grey.withOpacity(0.6)),
'Support'),
),
InkWell(
onTap: () {},
child: getTile(
Icon(Icons.star_rate,
color: Colors.yellow.withOpacity(0.6)),
'Rate our App'),
),
],
),
),
Container(
margin: EdgeInsets.all(fixPadding),
padding: EdgeInsets.all(fixPadding),
decoration: BoxDecoration(
color: whiteColor,
borderRadius: BorderRadius.circular(5.0),
boxShadow: <BoxShadow>[
BoxShadow(
blurRadius: 1.5,
spreadRadius: 1.5,
color: Colors.grey[200],
),
],
),
child: Column(
children: <Widget>[
InkWell(
onTap: logoutDialogue,
child: getTile(
Icon(Icons.exit_to_app,
color: Colors.grey.withOpacity(0.6)),
'Logout'),
),
],
),
),
],
),
);
}
getTile(Icon icon, String title) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
height: 40.0,
width: 40.0,
alignment: Alignment.center,
child: icon,
),
widthSpace,
Text(
title,
style: listItemTitleStyle,
),
],
),
Icon(
Icons.arrow_forward_ios,
size: 16.0,
color: Colors.grey.withOpacity(0.6),
),
],
);
}
void logout(context) {
Authentication _auth = Authentication();
_auth.logOut(context);
// await FirebaseAuth.instance.signOut();
// Navigator.pop(context);
}
}

在注销时检查当前用户是否已经登录,当您使用then-block时,不需要使用await关键字。

Future<void> logOut(BuildContext context) async {
try {
final User firebaseUser = await FirebaseAuth.instance.currentUser;

if (firebaseUser != null) {
FirebaseAuth.instance.signOut().then((value) => {
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) 
=> Login()), (route) => false)
});
}
} catch (e) {
print(e); // TODO: show dialog with error
}
}