Attachment badges

This commit is contained in:
LittleSheep 2024-05-20 23:39:23 +08:00
parent ff740aab9b
commit 2ec9cd814d
3 changed files with 54 additions and 6 deletions

View File

@ -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(),
),
),
),
],
), ),
); );
} }
} }

View File

@ -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': '取消',

View File

@ -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),