buildPage method
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,
);
}