Fixes for Settings Page
This commit is contained in:
@@ -10,24 +10,49 @@ import 'package:pweb/generated/i18n/app_localizations.dart';
|
||||
|
||||
|
||||
class AccountAvatar extends StatelessWidget {
|
||||
const AccountAvatar({super.key});
|
||||
final double? size;
|
||||
final bool showHeader;
|
||||
final String? fallbackUrl;
|
||||
final AccountProvider? provider;
|
||||
|
||||
const AccountAvatar({
|
||||
super.key,
|
||||
this.size,
|
||||
this.showHeader = true,
|
||||
this.fallbackUrl,
|
||||
this.provider,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final loc = AppLocalizations.of(context)!;
|
||||
if (provider != null) {
|
||||
return _buildAvatar(context, provider!);
|
||||
}
|
||||
|
||||
return Consumer<AccountProvider>(
|
||||
builder: (context, provider, _) => UserAccountsDrawerHeader(
|
||||
accountName: Text(provider.account?.name ?? loc.userNamePlaceholder),
|
||||
accountEmail: Text(provider.account?.login ?? loc.usernameHint),
|
||||
currentAccountPicture: CircleAvatar(
|
||||
backgroundImage: (provider.account?.avatarUrl?.isNotEmpty ?? false)
|
||||
? CachedNetworkImageProvider(provider.account!.avatarUrl!)
|
||||
: null,
|
||||
child: (provider.account?.avatarUrl?.isNotEmpty ?? false)
|
||||
? null
|
||||
: const Icon(Icons.account_circle, size: 50),
|
||||
),
|
||||
),
|
||||
builder: (context, provider, _) => _buildAvatar(context, provider),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildAvatar(BuildContext context, AccountProvider provider) {
|
||||
final avatarUrl = (provider.account?.avatarUrl ?? fallbackUrl)?.trim();
|
||||
final hasAvatar = avatarUrl?.isNotEmpty == true;
|
||||
final radius = size != null ? size! / 2 : null;
|
||||
final double placeholderIconSize = size != null ? size! * 0.55 : 50;
|
||||
|
||||
final avatar = CircleAvatar(
|
||||
radius: radius,
|
||||
backgroundImage: hasAvatar ? CachedNetworkImageProvider(avatarUrl!) : null,
|
||||
child: hasAvatar ? null : Icon(Icons.account_circle, size: placeholderIconSize),
|
||||
);
|
||||
|
||||
if (!showHeader) return avatar;
|
||||
|
||||
final loc = AppLocalizations.of(context)!;
|
||||
return UserAccountsDrawerHeader(
|
||||
accountName: Text(provider.account?.describable.name ?? loc.userNamePlaceholder),
|
||||
accountEmail: Text(provider.account?.login ?? loc.usernameHint),
|
||||
currentAccountPicture: avatar,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'package:pshared/provider/account.dart';
|
||||
|
||||
import 'package:pweb/widgets/sidebar/destinations.dart';
|
||||
import 'package:pweb/widgets/sidebar/side_menu.dart';
|
||||
import 'package:pweb/widgets/sidebar/user.dart';
|
||||
@@ -18,7 +22,7 @@ class PayoutSidebar extends StatelessWidget {
|
||||
|
||||
final PayoutDestination selected;
|
||||
final ValueChanged<PayoutDestination> onSelected;
|
||||
final VoidCallback? onLogout;
|
||||
final Future<void> Function()? onLogout;
|
||||
|
||||
final String? userName;
|
||||
final String? avatarUrl;
|
||||
@@ -27,6 +31,15 @@ class PayoutSidebar extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final accountName = context.select<AccountProvider, String?>(
|
||||
(provider) => provider.account?.describable.name,
|
||||
);
|
||||
final accountAvatar = context.select<AccountProvider, String?>(
|
||||
(provider) => provider.account?.avatarUrl,
|
||||
);
|
||||
final resolvedUserName = userName ?? accountName;
|
||||
final resolvedAvatarUrl = avatarUrl ?? accountAvatar;
|
||||
|
||||
final menuItems = items ??
|
||||
<PayoutDestination>[
|
||||
PayoutDestination.dashboard,
|
||||
@@ -42,16 +55,16 @@ class PayoutSidebar extends StatelessWidget {
|
||||
children: [
|
||||
UserProfileCard(
|
||||
theme: theme,
|
||||
avatarUrl: avatarUrl,
|
||||
userName: userName,
|
||||
avatarUrl: resolvedAvatarUrl,
|
||||
userName: resolvedUserName,
|
||||
selected: selected,
|
||||
onSelected: onSelected
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
SideMenuColumn(
|
||||
theme: theme,
|
||||
avatarUrl: avatarUrl,
|
||||
userName: userName,
|
||||
avatarUrl: resolvedAvatarUrl,
|
||||
userName: resolvedUserName,
|
||||
items: menuItems,
|
||||
selected: selected,
|
||||
onSelected: onSelected,
|
||||
|
||||
Reference in New Issue
Block a user