Browse Source

refactor(neon): Use Stacks conditionally

Signed-off-by: jld3103 <jld3103yt@gmail.com>
pull/863/head
jld3103 1 year ago
parent
commit
7c3c3ca8e6
No known key found for this signature in database
GPG Key ID: 9062417B9E8EB7B3
  1. 46
      packages/neon/neon/lib/src/widgets/app_implementation_icon.dart
  2. 63
      packages/neon/neon/lib/src/widgets/user_avatar.dart

46
packages/neon/neon/lib/src/widgets/app_implementation_icon.dart

@ -21,25 +21,31 @@ class NeonAppImplementationIcon extends StatelessWidget {
final double? size; final double? size;
@override @override
Widget build(final BuildContext context) => Stack( Widget build(final BuildContext context) {
alignment: Alignment.bottomRight, final icon = Container(
children: [ margin: const EdgeInsets.all(5),
Container( child: appImplementation.buildIcon(
margin: const EdgeInsets.all(5), size: size,
child: appImplementation.buildIcon( color: color,
size: size, ),
color: color, );
),
if (unreadCount == 0) {
return icon;
}
return Stack(
alignment: Alignment.bottomRight,
children: [
icon,
Text(
unreadCount.toString(),
style: TextStyle(
color: color,
fontWeight: FontWeight.bold,
), ),
if (unreadCount > 0) ...[ ),
Text( ],
unreadCount.toString(), );
style: TextStyle( }
color: color,
fontWeight: FontWeight.bold,
),
),
],
],
);
} }

63
packages/neon/neon/lib/src/widgets/user_avatar.dart

@ -56,39 +56,44 @@ class _UserAvatarState extends State<NeonUserAvatar> {
final brightness = Theme.of(context).brightness; final brightness = Theme.of(context).brightness;
size = constraints.constrain(Size.square(widget.size ?? largeIconSize)).shortestSide; size = constraints.constrain(Size.square(widget.size ?? largeIconSize)).shortestSide;
final pixelSize = (size * MediaQuery.of(context).devicePixelRatio).toInt(); final pixelSize = (size * MediaQuery.of(context).devicePixelRatio).toInt();
final avatar = CircleAvatar(
radius: size / 2,
backgroundColor: widget.backgroundColor,
child: ClipOval(
child: NeonCachedImage.custom(
cacheKey: '${widget.account.id}-avatar-${widget.username}-$brightness$pixelSize',
getImage: () async {
if (brightness == Brightness.dark) {
return (await widget.account.client.core.avatar.getAvatarDark(
userId: widget.username,
size: pixelSize,
))
.data;
} else {
return (await widget.account.client.core.avatar.getAvatar(
userId: widget.username,
size: pixelSize,
))
.data;
}
},
),
),
);
if (!widget.showStatus) {
return avatar;
}
return Stack( return Stack(
alignment: Alignment.center, alignment: Alignment.center,
children: [ children: [
CircleAvatar( avatar,
radius: size / 2, ResultBuilder<UserStatusPublicInterface?>(
backgroundColor: widget.backgroundColor, stream: _userStatusBloc.statuses.mapNotNull((final statuses) => statuses[widget.username]),
child: ClipOval( builder: _userStatusIconBuilder,
child: NeonCachedImage.custom(
cacheKey: '${widget.account.id}-avatar-${widget.username}-$brightness$pixelSize',
getImage: () async {
if (brightness == Brightness.dark) {
return (await widget.account.client.core.avatar.getAvatarDark(
userId: widget.username,
size: pixelSize,
))
.data;
} else {
return (await widget.account.client.core.avatar.getAvatar(
userId: widget.username,
size: pixelSize,
))
.data;
}
},
),
),
), ),
if (widget.showStatus) ...[
ResultBuilder<UserStatusPublicInterface?>(
stream: _userStatusBloc.statuses.mapNotNull((final statuses) => statuses[widget.username]),
builder: _userStatusIconBuilder,
),
],
], ],
); );
}, },

Loading…
Cancel
Save