✨ Attachment badges
This commit is contained in:
		| @@ -1,20 +1,58 @@ | |||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:get/get.dart'; | ||||||
| import 'package:solian/models/attachment.dart'; | import 'package:solian/models/attachment.dart'; | ||||||
| import 'package:solian/services.dart'; | import 'package:solian/services.dart'; | ||||||
|  |  | ||||||
| class AttachmentItem extends StatelessWidget { | class AttachmentItem extends StatelessWidget { | ||||||
|   final Attachment item; |   final Attachment item; | ||||||
|  |   final String? badge; | ||||||
|  |   final bool show; | ||||||
|  |   final Function onHide; | ||||||
|  |  | ||||||
|   const AttachmentItem({super.key, required this.item}); |   const AttachmentItem({ | ||||||
|  |     super.key, | ||||||
|  |     required this.item, | ||||||
|  |     required this.onHide, | ||||||
|  |     this.badge, | ||||||
|  |     this.show = true, | ||||||
|  |   }); | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     return Hero( |     return Hero( | ||||||
|       tag: Key('a${item.uuid}'), |       tag: Key('a${item.uuid}'), | ||||||
|       child: Image.network( |       child: Stack( | ||||||
|         '${ServiceFinder.services['paperclip']}/api/attachments/${item.id}', |         fit: StackFit.expand, | ||||||
|         fit: BoxFit.cover, |         children: [ | ||||||
|  |           Image.network( | ||||||
|  |             '${ServiceFinder.services['paperclip']}/api/attachments/${item.id}', | ||||||
|  |             fit: BoxFit.cover, | ||||||
|  |           ), | ||||||
|  |           if (show && badge != null) | ||||||
|  |             Positioned( | ||||||
|  |               right: 12, | ||||||
|  |               bottom: 8, | ||||||
|  |               child: Material( | ||||||
|  |                 color: Colors.transparent, | ||||||
|  |                 child: Chip(label: Text(badge!)), | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  |           if (show && item.isMature) | ||||||
|  |             Positioned( | ||||||
|  |               top: 8, | ||||||
|  |               left: 12, | ||||||
|  |               child: Material( | ||||||
|  |                 color: Colors.transparent, | ||||||
|  |                 child: ActionChip( | ||||||
|  |                   visualDensity: const VisualDensity(vertical: -4, horizontal: -4), | ||||||
|  |                   avatar: Icon(Icons.visibility_off, color: Theme.of(context).colorScheme.onSurfaceVariant), | ||||||
|  |                   label: Text('hide'.tr), | ||||||
|  |                   onPressed: () => onHide(), | ||||||
|  |                 ), | ||||||
|  |               ), | ||||||
|  |             ), | ||||||
|  |         ], | ||||||
|       ), |       ), | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ class SolianMessages extends Translations { | |||||||
|   @override |   @override | ||||||
|   Map<String, Map<String, String>> get keys => { |   Map<String, Map<String, String>> get keys => { | ||||||
|         'en_US': { |         'en_US': { | ||||||
|  |           'hide': 'Hide', | ||||||
|           'okay': 'Okay', |           'okay': 'Okay', | ||||||
|           'next': 'Next', |           'next': 'Next', | ||||||
|           'page': 'Page', |           'page': 'Page', | ||||||
| @@ -52,6 +53,7 @@ class SolianMessages extends Translations { | |||||||
|           'attachmentAlt': 'Alternative text', |           'attachmentAlt': 'Alternative text', | ||||||
|         }, |         }, | ||||||
|         'zh_CN': { |         'zh_CN': { | ||||||
|  |           'hide': '隐藏', | ||||||
|           'okay': '确认', |           'okay': '确认', | ||||||
|           'next': '下一步', |           'next': '下一步', | ||||||
|           'cancel': '取消', |           'cancel': '取消', | ||||||
|   | |||||||
| @@ -121,7 +121,15 @@ class _AttachmentListState extends State<AttachmentList> { | |||||||
|             child: Stack( |             child: Stack( | ||||||
|               fit: StackFit.expand, |               fit: StackFit.expand, | ||||||
|               children: [ |               children: [ | ||||||
|                 AttachmentItem(key: Key('a${element!.uuid}'), item: element), |                 AttachmentItem( | ||||||
|  |                   key: Key('a${element!.uuid}'), | ||||||
|  |                   item: element, | ||||||
|  |                   badge: _attachmentsMeta.length > 1 ? '${idx+1}/${_attachmentsMeta.length}' : null, | ||||||
|  |                   show: !element.isMature || _showMature, | ||||||
|  |                   onHide: () { | ||||||
|  |                     setState(() => _showMature = false); | ||||||
|  |                   }, | ||||||
|  |                 ), | ||||||
|                 if (element.isMature && !_showMature) |                 if (element.isMature && !_showMature) | ||||||
|                   BackdropFilter( |                   BackdropFilter( | ||||||
|                     filter: ImageFilter.blur(sigmaX: 20, sigmaY: 20), |                     filter: ImageFilter.blur(sigmaX: 20, sigmaY: 20), | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user