buildPage method

Widget buildPage(
  1. BuildContext context
)

Implementation

Widget buildPage(BuildContext context) {
  final isCupertino = CupertinoUserInterfaceLevel.maybeOf(context) != null;
  final providersScopeKey = RebuildScopeKey();
  final mfaScopeKey = RebuildScopeKey();
  final emailVerificationScopeKey = RebuildScopeKey();

  final user = auth.currentUser!;

  final avatarWidget = avatar ??
      Align(
        child: UserAvatar(
          auth: auth,
          placeholderColor: avatarPlaceholderColor,
          shape: avatarShape,
          size: avatarSize,
        ),
      );

  final content = Column(
    crossAxisAlignment: CrossAxisAlignment.stretch,
    children: [
      avatarWidget,
      Align(child: EditableUserDisplayName(auth: auth)),
      if (!user.emailVerified) ...[
        RebuildScope(
          builder: (context) {
            if (user.emailVerified) {
              return const SizedBox.shrink();
            }

            return _EmailVerificationBadge(
              auth: auth,
              actionCodeSettings: actionCodeSettings,
            );
          },
          scopeKey: emailVerificationScopeKey,
        ),
      ],
      RebuildScope(
        builder: (context) {
          final user = auth.currentUser!;
          final linkedProviders = getLinkedProviders(user);

          if (linkedProviders.isEmpty) {
            return const SizedBox.shrink();
          }

          return Padding(
            padding: const EdgeInsets.only(top: 32),
            child: _LinkedProvidersRow(
              auth: auth,
              providers: linkedProviders,
              onProviderUnlinked: providersScopeKey.rebuild,
              showUnlinkConfirmationDialog: showUnlinkConfirmationDialog,
            ),
          );
        },
        scopeKey: providersScopeKey,
      ),
      RebuildScope(
        builder: (context) {
          final user = auth.currentUser!;
          final availableProviders = getAvailableProviders(context, user);

          if (availableProviders.isEmpty) {
            return const SizedBox.shrink();
          }

          return Padding(
            padding: const EdgeInsets.only(top: 32),
            child: _AvailableProvidersRow(
              auth: auth,
              providers: availableProviders,
              onProviderLinked: providersScopeKey.rebuild,
            ),
          );
        },
        scopeKey: providersScopeKey,
      ),
      if (showMFATile)
        RebuildScope(
          builder: (context) {
            final user = auth.currentUser!;
            final mfa = user.multiFactor;

            return FutureBuilder<List<fba.MultiFactorInfo>>(
              future: mfa.getEnrolledFactors(),
              builder: (context, snapshot) {
                if (!snapshot.hasData) {
                  return const SizedBox.shrink();
                }

                final enrolledFactors = snapshot.requireData;

                return Padding(
                  padding: const EdgeInsets.only(top: 8.0),
                  child: _MFABadge(
                    providers: providers,
                    enrolled: enrolledFactors.isNotEmpty,
                    auth: auth,
                    onToggled: mfaScopeKey.rebuild,
                  ),
                );
              },
            );
          },
          scopeKey: mfaScopeKey,
        ),
      ...children,
      const SizedBox(height: 16),
      SignOutButton(
        auth: auth,
        variant: ButtonVariant.outlined,
      ),
      const SizedBox(height: 8),
      DeleteAccountButton(
        auth: auth,
        showDeleteConfirmationDialog: showDeleteConfirmationDialog,
        onSignInRequired: () {
          return _reauthenticate(context);
        },
      ),
    ],
  );
  final body = Padding(
    padding: const EdgeInsets.all(16),
    child: Center(
      child: LayoutBuilder(
        builder: (context, constraints) {
          if (constraints.maxWidth > 500) {
            return ConstrainedBox(
              constraints: const BoxConstraints(maxWidth: 500),
              child: content,
            );
          } else {
            return content;
          }
        },
      ),
    ),
  );

  Widget child = SafeArea(child: SingleChildScrollView(child: body));

  if (isCupertino) {
    child = CupertinoPageScaffold(
      navigationBar: cupertinoNavigationBar,
      child: SafeArea(
        child: SingleChildScrollView(child: child),
      ),
    );
  } else {
    child = Scaffold(
      appBar: appBar,
      body: SafeArea(
        child: SingleChildScrollView(child: body),
      ),
    );
  }

  return FirebaseUIActions(
    actions: actions ?? const [],
    child: child,
  );
}