136 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:collection/collection.dart';
 | |
| import 'package:easy_localization/easy_localization.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:gap/gap.dart';
 | |
| import 'package:hooks_riverpod/hooks_riverpod.dart';
 | |
| import 'package:island/models/post.dart';
 | |
| import 'package:island/widgets/post/post_shared.dart';
 | |
| import 'package:qr_flutter/qr_flutter.dart';
 | |
| import 'package:styled_widget/styled_widget.dart';
 | |
| 
 | |
| class PostItemScreenshot extends ConsumerWidget {
 | |
|   final SnPost item;
 | |
|   final EdgeInsets? padding;
 | |
|   final bool isFullPost;
 | |
|   final bool isShowReference;
 | |
|   const PostItemScreenshot({
 | |
|     super.key,
 | |
|     required this.item,
 | |
|     this.padding,
 | |
|     this.isFullPost = false,
 | |
|     this.isShowReference = true,
 | |
|   });
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context, WidgetRef ref) {
 | |
|     final renderingPadding =
 | |
|         padding ?? const EdgeInsets.symmetric(horizontal: 8, vertical: 8);
 | |
| 
 | |
|     final mostReaction =
 | |
|         item.reactionsCount.isEmpty
 | |
|             ? null
 | |
|             : item.reactionsCount.entries
 | |
|                 .sortedBy((e) => e.value)
 | |
|                 .map((e) => e.key)
 | |
|                 .last;
 | |
| 
 | |
|     final isDark = MediaQuery.of(context).platformBrightness == Brightness.dark;
 | |
| 
 | |
|     return Material(
 | |
|       elevation: 0,
 | |
|       color: Theme.of(context).colorScheme.surface,
 | |
|       child: Column(
 | |
|         mainAxisSize: MainAxisSize.min,
 | |
|         crossAxisAlignment: CrossAxisAlignment.start,
 | |
|         children: [
 | |
|           Gap(renderingPadding.vertical),
 | |
|           PostHeader(
 | |
|             item: item,
 | |
|             isFullPost: isFullPost,
 | |
|             isInteractive: false,
 | |
|             renderingPadding: renderingPadding,
 | |
|             isRelativeTime: false,
 | |
|             trailing:
 | |
|                 mostReaction != null
 | |
|                     ? Row(
 | |
|                       children: [
 | |
|                         Text(
 | |
|                           kReactionTemplates[mostReaction]?.icon ?? '',
 | |
|                           style: const TextStyle(fontSize: 20),
 | |
|                         ),
 | |
|                         const Gap(4),
 | |
|                         Text(
 | |
|                           'x${item.reactionsCount[mostReaction]}',
 | |
|                           style: const TextStyle(fontSize: 11),
 | |
|                         ),
 | |
|                       ],
 | |
|                     )
 | |
|                     : null,
 | |
|           ),
 | |
|           PostBody(
 | |
|             item: item,
 | |
|             renderingPadding: renderingPadding,
 | |
|             isFullPost: isFullPost,
 | |
|             isTextSelectable: false,
 | |
|             isInteractive: false,
 | |
|           ),
 | |
|           if (isShowReference)
 | |
|             ReferencedPostWidget(
 | |
|               item: item,
 | |
|               isInteractive: false,
 | |
|               renderingPadding: renderingPadding,
 | |
|             ),
 | |
|           Container(
 | |
|             color: Theme.of(context).colorScheme.surfaceContainerLow,
 | |
|             margin: const EdgeInsets.only(top: 8),
 | |
|             padding: EdgeInsets.symmetric(
 | |
|               horizontal: renderingPadding.horizontal,
 | |
|               vertical: 4,
 | |
|             ),
 | |
|             child: Row(
 | |
|               children: [
 | |
|                 SizedBox(
 | |
|                   width: 44,
 | |
|                   height: 44,
 | |
|                   child: Image.asset(
 | |
|                     'assets/icons/icon${isDark ? '-dark' : ''}.png',
 | |
|                     width: 40,
 | |
|                     height: 40,
 | |
|                   ),
 | |
|                 ).padding(vertical: 8, right: 12),
 | |
|                 Expanded(
 | |
|                   child: Column(
 | |
|                     crossAxisAlignment: CrossAxisAlignment.start,
 | |
|                     children: [
 | |
|                       const Text(
 | |
|                         'Solar Network',
 | |
|                         style: TextStyle(
 | |
|                           fontSize: 14,
 | |
|                           fontWeight: FontWeight.bold,
 | |
|                         ),
 | |
|                       ),
 | |
|                       const Text(
 | |
|                         'sharePostSlogan',
 | |
|                         style: TextStyle(fontSize: 12),
 | |
|                       ).tr().opacity(0.9),
 | |
|                     ],
 | |
|                   ),
 | |
|                 ),
 | |
|                 QrImageView(
 | |
|                   data: 'https://solian.app/posts/${item.id}',
 | |
|                   version: QrVersions.auto,
 | |
|                   size: 60,
 | |
|                   errorCorrectionLevel: QrErrorCorrectLevel.M,
 | |
|                   backgroundColor: Colors.transparent,
 | |
|                   foregroundColor: Theme.of(context).colorScheme.onSurface,
 | |
|                   padding: const EdgeInsets.all(8),
 | |
|                 ),
 | |
|               ],
 | |
|             ),
 | |
|           ),
 | |
|         ],
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| }
 |