How to switch between Auth screen and Home screen based on bool value?

Viewed 255

I want to switch between the login screen and Home screen based on bool value(user.status) from the model class below

class User extends ChangeNotifier {
  int phoneNumber;
  bool status = false;
  notifyListeners();
}

The bool User.status value is flipped from below function

User _user = Provider.of<User>(context);
...
...
if (form.validate()) {

      _user.status = true;
}

The below function has to listen to the changes in the status value from the User model and change the screen to Home().

class Wrapper extends StatelessWidget {
@override
  Widget build(BuildContext context) {
    User authStatus = Provider.of<User>(context);
    return authStatus.status ? Home() : Auth();
  }
}

I don't have any errors, all the values are updating accordingly but the Wrapper() is not being rebuilt after listening to the changes from ChangeNotifier

1 Answers

Here's how I do it with Provider :

routes: {
  "/": (context) => MainPage(),
  "/detail": (context) => UserDetailPage(),
},
builder: (context, child) {
  return Consumer<UsersProvider>(
    child: child,
    builder: (context, provider, child) {

      final value = provider.user;
      if (!value.status) {
        return Navigator(
          onGenerateRoute: (settings) => MaterialPageRoute(
              settings: settings, builder: (context) => LoginPage()),
        );
      }

      return MultiProvider(
        providers: [
          ChangeNotifierProvider(create: (context) => UsersProvider()),
          ChangeNotifierProvider(
              create: (context) => InvoicesProvider()),
          ChangeNotifierProvider(create: (context) => EventsProvider()),
        ],
        child: child,
      );
    },
  );
},

Basically use builder in main.dart and defines routes, then inside builder use Consumer were child is the initial route MainPage() so if the user already login they will go there, and if not, base on status they will redirect to LoginPage(). I hope you can understand feel free to comment

Related