import 'package:flutter/material.dart'; import 'package:badges/badges.dart' as b; import 'package:matrix/matrix.dart'; import 'matrix.dart'; class UnreadRoomsBadge extends StatelessWidget { final bool Function(Room) filter; final b.BadgePosition? badgePosition; final Widget? child; const UnreadRoomsBadge({ super.key, required this.filter, this.badgePosition, this.child, }); @override Widget build(BuildContext context) { final theme = Theme.of(context); final unreadCount = Matrix.of(context).client.rooms .where(filter) .where((r) => (r.isUnread || r.membership == Membership.invite)) .length; return b.Badge( badgeStyle: b.BadgeStyle( badgeColor: theme.colorScheme.primary, elevation: 4, borderSide: BorderSide(color: theme.colorScheme.surface, width: 2), ), badgeContent: Text( unreadCount.toString(), style: TextStyle(color: theme.colorScheme.onPrimary, fontSize: 12), ), showBadge: unreadCount != 0, badgeAnimation: const b.BadgeAnimation.scale(), position: badgePosition ?? b.BadgePosition.bottomEnd(), child: child, ); } }