stateChanges static method

Future<Widget> stateChanges({
  1. Widget? loadingScreen(
    1. BuildContext
    )?,
  2. required Widget homeScreen(
    1. BuildContext,
    2. User
    ),
  3. required Widget loginScreen(
    1. BuildContext
    ),
})

Implementation

static Future<Widget> stateChanges({
  Widget? Function(BuildContext)? loadingScreen,
  required Widget Function(BuildContext, User) homeScreen,
  required Widget Function(BuildContext) loginScreen,
}) async {
  return StreamBuilder(
    stream: fire.authStateChanges(),
    builder: (context, snapshot) {
      if (snapshot.connectionState == ConnectionState.waiting) {
        return loadingScreen!(context) ??
            Scaffold(
              body: Center(
                child: SizedBox(
                  height: 100,
                  width: 100,
                  child: CircularProgressIndicator(),
                ),
              ),
            );
      }
      if (snapshot.hasData) {
        User user = fire.currentUser!;
        return homeScreen(context, user);
      }

      return loginScreen(context);
    },
  );
}