✨ Attachment badges
This commit is contained in:
parent
ff740aab9b
commit
2ec9cd814d
@ -1,20 +1,58 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:solian/models/attachment.dart';
|
||||
import 'package:solian/services.dart';
|
||||
|
||||
class AttachmentItem extends StatelessWidget {
|
||||
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
|
||||
Widget build(BuildContext context) {
|
||||
return Hero(
|
||||
tag: Key('a${item.uuid}'),
|
||||
child: Image.network(
|
||||
'${ServiceFinder.services['paperclip']}/api/attachments/${item.id}',
|
||||
fit: BoxFit.cover,
|
||||
child: Stack(
|
||||
fit: StackFit.expand,
|
||||
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
|
||||
Map<String, Map<String, String>> get keys => {
|
||||
'en_US': {
|
||||
'hide': 'Hide',
|
||||
'okay': 'Okay',
|
||||
'next': 'Next',
|
||||
'page': 'Page',
|
||||
@ -52,6 +53,7 @@ class SolianMessages extends Translations {
|
||||
'attachmentAlt': 'Alternative text',
|
||||
},
|
||||
'zh_CN': {
|
||||
'hide': '隐藏',
|
||||
'okay': '确认',
|
||||
'next': '下一步',
|
||||
'cancel': '取消',
|
||||
|
@ -121,7 +121,15 @@ class _AttachmentListState extends State<AttachmentList> {
|
||||
child: Stack(
|
||||
fit: StackFit.expand,
|
||||
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)
|
||||
BackdropFilter(
|
||||
filter: ImageFilter.blur(sigmaX: 20, sigmaY: 20),
|
||||
|
Loading…
Reference in New Issue
Block a user