buildPage method

Widget buildPage(
  1. BuildContext context
)

Implementation

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

  final user = auth.currentUser!;

  final content = Column(
    crossAxisAlignment: CrossAxisAlignment.stretch,
    children: [
      Align(
        child: UserAvatar(
          auth: auth,
          placeholderColor: avatarPlaceholderColor,
          shape: avatarShape,
          size: avatarSize,
        ),
      ),
      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,
              providerConfigs: linkedProviders,
              onProviderUnlinked: providersScopeKey.rebuild,
            ),
          );
        },
        scopeKey: providersScopeKey,
      ),
      RebuildScope(
        builder: (context) {
          final user = auth.currentUser!;
          final availableProviders = getAvailableProviders(user);

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

          return Padding(
            padding: const EdgeInsets.only(top: 32),
            child: AvailableProvidersRow(
              auth: auth,
              providerConfigs: availableProviders,
              onProviderLinked: providersScopeKey.rebuild,
            ),
          );
        },
        scopeKey: providersScopeKey,
      ),
      ...children,
      const SizedBox(height: 16),
      SignOutButton(
        auth: auth,
        variant: ButtonVariant.outlined,
      ),
      const SizedBox(height: 8),
      DeleteAccountButton(
        auth: auth,
        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 FlutterFireUIActions(
    actions: actions ?? const [],
    child: child,
  );
}