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.
		
		
		
		
		
			
		
			
				
	
	
		
			88 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Dart
		
	
import 'package:flutter/material.dart';
 | 
						|
 | 
						|
import 'package:flutter_gen/gen_l10n/l10n.dart';
 | 
						|
import 'package:go_router/go_router.dart';
 | 
						|
 | 
						|
import 'package:fluffychat/config/themes.dart';
 | 
						|
import 'package:fluffychat/pages/chat/chat.dart';
 | 
						|
import 'package:fluffychat/utils/date_time_extension.dart';
 | 
						|
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
 | 
						|
import 'package:fluffychat/widgets/avatar.dart';
 | 
						|
import 'package:fluffychat/widgets/presence_builder.dart';
 | 
						|
 | 
						|
class ChatAppBarTitle extends StatelessWidget {
 | 
						|
  final ChatController controller;
 | 
						|
  const ChatAppBarTitle(this.controller, {super.key});
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    final room = controller.room;
 | 
						|
    if (controller.selectedEvents.isNotEmpty) {
 | 
						|
      return Text(controller.selectedEvents.length.toString());
 | 
						|
    }
 | 
						|
    return InkWell(
 | 
						|
      hoverColor: Colors.transparent,
 | 
						|
      splashColor: Colors.transparent,
 | 
						|
      highlightColor: Colors.transparent,
 | 
						|
      onTap: controller.isArchived
 | 
						|
          ? null
 | 
						|
          : () => context.go('/rooms/${room.id}/details'),
 | 
						|
      child: Row(
 | 
						|
        children: [
 | 
						|
          Hero(
 | 
						|
            tag: 'content_banner',
 | 
						|
            child: Avatar(
 | 
						|
              mxContent: room.avatar,
 | 
						|
              name: room.getLocalizedDisplayname(
 | 
						|
                MatrixLocals(L10n.of(context)!),
 | 
						|
              ),
 | 
						|
              size: 32,
 | 
						|
            ),
 | 
						|
          ),
 | 
						|
          const SizedBox(width: 12),
 | 
						|
          Expanded(
 | 
						|
            child: Column(
 | 
						|
              crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
              children: [
 | 
						|
                Text(
 | 
						|
                  room.getLocalizedDisplayname(MatrixLocals(L10n.of(context)!)),
 | 
						|
                  maxLines: 1,
 | 
						|
                  overflow: TextOverflow.ellipsis,
 | 
						|
                  style: const TextStyle(
 | 
						|
                    fontSize: 16,
 | 
						|
                  ),
 | 
						|
                ),
 | 
						|
                AnimatedSize(
 | 
						|
                  duration: FluffyThemes.animationDuration,
 | 
						|
                  child: PresenceBuilder(
 | 
						|
                    userId: room.directChatMatrixID,
 | 
						|
                    builder: (context, presence) {
 | 
						|
                      final lastActiveTimestamp = presence?.lastActiveTimestamp;
 | 
						|
                      final style = Theme.of(context).textTheme.bodySmall;
 | 
						|
                      if (presence?.currentlyActive == true) {
 | 
						|
                        return Text(
 | 
						|
                          L10n.of(context)!.currentlyActive,
 | 
						|
                          style: style,
 | 
						|
                        );
 | 
						|
                      }
 | 
						|
                      if (lastActiveTimestamp != null) {
 | 
						|
                        return Text(
 | 
						|
                          L10n.of(context)!.lastActiveAgo(
 | 
						|
                            lastActiveTimestamp.localizedTimeShort(context),
 | 
						|
                          ),
 | 
						|
                          style: style,
 | 
						|
                        );
 | 
						|
                      }
 | 
						|
                      return const SizedBox.shrink();
 | 
						|
                    },
 | 
						|
                  ),
 | 
						|
                ),
 | 
						|
              ],
 | 
						|
            ),
 | 
						|
          ),
 | 
						|
        ],
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |