Surface/lib/widgets/account/account_image.dart
LittleSheep 17e6b81f76 Show badge in more places
♻️ Refactor account image
2025-03-02 21:52:41 +08:00

68 lines
2.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:provider/provider.dart';
import 'package:styled_widget/styled_widget.dart';
import 'package:surface/providers/sn_network.dart';
import 'package:surface/widgets/universal_image.dart';
class AccountImage extends StatelessWidget {
final String? content;
final Color? backgroundColor;
final Color? foregroundColor;
final double? radius;
final double? borderRadius;
final Widget? fallbackWidget;
final Widget? badge;
const AccountImage({
super.key,
required this.content,
this.backgroundColor,
this.foregroundColor,
this.radius,
this.borderRadius,
this.fallbackWidget,
this.badge,
});
@override
Widget build(BuildContext context) {
final sn = context.read<SnNetworkProvider>();
final url = sn.getAttachmentUrl(content ?? '');
return Stack(
children: [
SizedBox(
width: (radius != null ? radius! : 20) * 2,
height: (radius != null ? radius! : 20) * 2,
child: ClipRRect(
borderRadius: BorderRadius.circular(borderRadius ?? radius ?? 20),
child: (content?.isEmpty ?? true)
? Container(
color: backgroundColor ?? Theme.of(context).colorScheme.primaryContainer,
child: (fallbackWidget ??
Icon(
Symbols.account_circle,
size: radius != null ? radius! * 1.2 : 24,
color: foregroundColor,
))
.center(),
)
: AutoResizeUniversalImage(
sn.getAttachmentUrl(url),
key: Key('attachment-${content.hashCode}'),
fit: BoxFit.cover,
),
),
),
if (badge != null)
Positioned(
right: -4,
bottom: -4,
child: badge!,
),
],
);
}
}