You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
import 'package:flutter/material.dart';
 | 
						|
 | 
						|
import 'package:matrix/matrix.dart';
 | 
						|
 | 
						|
import 'package:fluffychat/config/themes.dart';
 | 
						|
 | 
						|
class UnreadBubble extends StatelessWidget {
 | 
						|
  final Room room;
 | 
						|
  const UnreadBubble({required this.room, super.key});
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    final theme = Theme.of(context);
 | 
						|
    final unread = room.isUnread;
 | 
						|
    final hasNotifications = room.notificationCount > 0;
 | 
						|
    final unreadBubbleSize = unread || room.hasNewMessages
 | 
						|
        ? room.notificationCount > 0
 | 
						|
            ? 20.0
 | 
						|
            : 14.0
 | 
						|
        : 0.0;
 | 
						|
    return AnimatedContainer(
 | 
						|
      duration: FluffyThemes.animationDuration,
 | 
						|
      curve: FluffyThemes.animationCurve,
 | 
						|
      alignment: Alignment.center,
 | 
						|
      padding: const EdgeInsets.symmetric(horizontal: 7),
 | 
						|
      height: unreadBubbleSize,
 | 
						|
      width: !hasNotifications && !unread && !room.hasNewMessages
 | 
						|
          ? 0
 | 
						|
          : (unreadBubbleSize - 9) * room.notificationCount.toString().length +
 | 
						|
              9,
 | 
						|
      decoration: BoxDecoration(
 | 
						|
        color: room.highlightCount > 0
 | 
						|
            ? theme.colorScheme.error
 | 
						|
            : hasNotifications || room.markedUnread
 | 
						|
                ? theme.colorScheme.primary
 | 
						|
                : theme.colorScheme.primaryContainer,
 | 
						|
        borderRadius: BorderRadius.circular(7),
 | 
						|
      ),
 | 
						|
      child: hasNotifications
 | 
						|
          ? Text(
 | 
						|
              room.notificationCount.toString(),
 | 
						|
              style: TextStyle(
 | 
						|
                color: room.highlightCount > 0
 | 
						|
                    ? theme.colorScheme.onError
 | 
						|
                    : hasNotifications
 | 
						|
                        ? theme.colorScheme.onPrimary
 | 
						|
                        : theme.colorScheme.onPrimaryContainer,
 | 
						|
                fontSize: 13,
 | 
						|
                fontWeight: FontWeight.w500,
 | 
						|
              ),
 | 
						|
              textAlign: TextAlign.center,
 | 
						|
            )
 | 
						|
          : const SizedBox.shrink(),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |