import 'package:flutter/material.dart'; import 'package:badges/badges.dart'; import 'package:matrix/matrix.dart'; import 'matrix.dart'; class UnreadRoomsBadge extends StatelessWidget { final bool Function(Room) filter; final BadgePosition? badgePosition; final Widget? child; const UnreadRoomsBadge({ Key? key, required this.filter, this.badgePosition, this.child, }) : super(key: key); @override Widget build(BuildContext context) { return StreamBuilder( stream: Matrix.of(context) .client .onSync .stream .where((syncUpdate) => syncUpdate.hasRoomUpdate), builder: (context, _) { final unreadCount = Matrix.of(context) .client .rooms .where(filter) .where((r) => (r.isUnread || r.membership == Membership.invite)) .length; return Badge( alignment: Alignment.bottomRight, badgeContent: Text( unreadCount.toString(), style: TextStyle( color: Theme.of(context).colorScheme.onPrimary, fontSize: 12, ), ), showBadge: unreadCount != 0, animationType: BadgeAnimationType.scale, badgeColor: Theme.of(context).colorScheme.primary, position: badgePosition, elevation: 4, borderSide: BorderSide( color: Theme.of(context).colorScheme.background, width: 2, strokeAlign: StrokeAlign.outside, ), child: child, ); }); } }