Flutter Firebase UI not updating and showing correct user info after signing out and in with different user

Issue

I’m creating and testing a simple dashboard that I want to display the current user’s email. I’m just using test1@test.com and test2@test.com. When I signout of test1 and sign in with test2, my UI still says "Good Evening, test1@test.com" when it should be test2@test.com.

I’m using Firebase Authentication and here is the basic code for displaying the user email(cutting out lots of columns and stuff):

final userEmail = FirebaseAuth.instance.currentUser!.email;

class Dashboard extends ConsumerStatefulWidget {
  const Dashboard({Key? key}) : super(key: key);

  @override
  _DashboardState createState() => _DashboardState();
}

class _DashboardState extends ConsumerState<Dashboard> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(children: [
         Padding(
            padding: const EdgeInsets.fromLTRB(0, 15, 0, 15),
               child: AutoSizeText(
                  'Good Morning, $userEmail!',
                              ),
                            ),

Then, for signing out I just call a simple Firebase instance.

 ElevatedButton(
                  
                  onPressed: FirebaseAuth.instance.signOut,
                  child: const Text(
                    'Sign Out',
                  ))

The signing out in and works fine with my authentication repo but not sure why the UI isn’t updating to current user. I thought this would be enough. I tried adding

  @override
  void dispose() {
    super.dispose();
  }

but that also didn’t work.

Solution

You are setting the variable right in the starting and it won’t update itself after signing out and signing in. You must update it every time a change occurs.

To do so you can add this in initState:

@override
void initState() {
    super.initState();
    FirebaseAuth.instance.authStateChanges().listen((User? user) {
        userEmail = user!.email;
    });
}

And you should also declare the userEmail variable with var instead of final.

Answered By – SuPythony

Answer Checked By – Katrina (FlutterFixes Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *