102 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
| import 'package:flutter/material.dart';
 | |
| 
 | |
| import 'package:fluffychat/generated/l10n/l10n.dart';
 | |
| import 'package:matrix/matrix.dart';
 | |
| 
 | |
| import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
 | |
| import '../../../config/app_config.dart';
 | |
| 
 | |
| class ReplyContent extends StatelessWidget {
 | |
|   final Event replyEvent;
 | |
|   final bool ownMessage;
 | |
|   final Timeline? timeline;
 | |
| 
 | |
|   const ReplyContent(
 | |
|     this.replyEvent, {
 | |
|     this.ownMessage = false,
 | |
|     super.key,
 | |
|     this.timeline,
 | |
|   });
 | |
| 
 | |
|   static const BorderRadius borderRadius = BorderRadius.only(
 | |
|     topRight: Radius.circular(AppConfig.borderRadius / 2),
 | |
|     bottomRight: Radius.circular(AppConfig.borderRadius / 2),
 | |
|   );
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     final theme = Theme.of(context);
 | |
| 
 | |
|     final timeline = this.timeline;
 | |
|     final displayEvent =
 | |
|         timeline != null ? replyEvent.getDisplayEvent(timeline) : replyEvent;
 | |
|     final fontSize = AppConfig.messageFontSize * AppConfig.fontSizeFactor;
 | |
|     final color = theme.brightness == Brightness.dark
 | |
|         ? theme.colorScheme.onTertiaryContainer
 | |
|         : ownMessage
 | |
|             ? theme.colorScheme.tertiaryContainer
 | |
|             : theme.colorScheme.tertiary;
 | |
| 
 | |
|     return Material(
 | |
|       color: Colors.transparent,
 | |
|       borderRadius: borderRadius,
 | |
|       child: Row(
 | |
|         mainAxisSize: MainAxisSize.min,
 | |
|         children: <Widget>[
 | |
|           Container(
 | |
|             width: 5,
 | |
|             height: fontSize * 2 + 16,
 | |
|             decoration: BoxDecoration(
 | |
|               borderRadius: BorderRadius.circular(AppConfig.borderRadius),
 | |
|               color: color,
 | |
|             ),
 | |
|           ),
 | |
|           const SizedBox(width: 6),
 | |
|           Flexible(
 | |
|             child: Column(
 | |
|               crossAxisAlignment: CrossAxisAlignment.start,
 | |
|               mainAxisAlignment: MainAxisAlignment.center,
 | |
|               children: <Widget>[
 | |
|                 FutureBuilder<User?>(
 | |
|                   initialData: displayEvent.senderFromMemoryOrFallback,
 | |
|                   future: displayEvent.fetchSenderUser(),
 | |
|                   builder: (context, snapshot) {
 | |
|                     return Text(
 | |
|                       '${snapshot.data?.calcDisplayname() ?? displayEvent.senderFromMemoryOrFallback.calcDisplayname()}:',
 | |
|                       maxLines: 1,
 | |
|                       overflow: TextOverflow.ellipsis,
 | |
|                       style: TextStyle(
 | |
|                         fontWeight: FontWeight.bold,
 | |
|                         color: color,
 | |
|                         fontSize: fontSize,
 | |
|                       ),
 | |
|                     );
 | |
|                   },
 | |
|                 ),
 | |
|                 Text(
 | |
|                   displayEvent.calcLocalizedBodyFallback(
 | |
|                     MatrixLocals(L10n.of(context)),
 | |
|                     withSenderNamePrefix: false,
 | |
|                     hideReply: true,
 | |
|                   ),
 | |
|                   overflow: TextOverflow.ellipsis,
 | |
|                   maxLines: 1,
 | |
|                   style: TextStyle(
 | |
|                     color: theme.brightness == Brightness.dark
 | |
|                         ? theme.colorScheme.onSurface
 | |
|                         : ownMessage
 | |
|                             ? theme.colorScheme.onTertiary
 | |
|                             : theme.colorScheme.onSurface,
 | |
|                     fontSize: fontSize,
 | |
|                   ),
 | |
|                 ),
 | |
|               ],
 | |
|             ),
 | |
|           ),
 | |
|           const SizedBox(width: 6),
 | |
|         ],
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |