mirror of
https://github.com/lifegpc/eh_downloader_flutter.git
synced 2026-07-08 01:30:28 +08:00
Remove iconbutton in thumbnail
This commit is contained in:
@@ -149,8 +149,8 @@ class _GalleryInfo extends State<GalleryInfo> with ThemeModeWidget {
|
|||||||
SliverGridDelegateWithMaxCrossAxisExtent(
|
SliverGridDelegateWithMaxCrossAxisExtent(
|
||||||
maxCrossAxisExtent: max.toDouble(),
|
maxCrossAxisExtent: max.toDouble(),
|
||||||
childAspectRatio: 1,
|
childAspectRatio: 1,
|
||||||
crossAxisSpacing: 10,
|
crossAxisSpacing: 4,
|
||||||
mainAxisSpacing: 10),
|
mainAxisSpacing: 4),
|
||||||
files: widget.files,
|
files: widget.files,
|
||||||
gid: widget.gData.meta.gid,
|
gid: widget.gData.meta.gid,
|
||||||
isSelectMode: widget.isSelectMode,
|
isSelectMode: widget.isSelectMode,
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import '../api/file.dart';
|
|||||||
import '../api/gallery.dart';
|
import '../api/gallery.dart';
|
||||||
import '../globals.dart';
|
import '../globals.dart';
|
||||||
import '../utils.dart';
|
import '../utils.dart';
|
||||||
import '../utils/clipboard.dart';
|
|
||||||
import '../viewer/single.dart';
|
import '../viewer/single.dart';
|
||||||
import 'image.dart';
|
import 'image.dart';
|
||||||
|
|
||||||
@@ -65,17 +64,6 @@ class Thumbnail extends StatefulWidget {
|
|||||||
State<Thumbnail> createState() => _Thumbnail();
|
State<Thumbnail> createState() => _Thumbnail();
|
||||||
}
|
}
|
||||||
|
|
||||||
enum _ThumbnailMenu {
|
|
||||||
copyImage,
|
|
||||||
copyImgUrl,
|
|
||||||
saveAs,
|
|
||||||
markAsNsfw,
|
|
||||||
markAsSfw,
|
|
||||||
markAsAd,
|
|
||||||
markAsNonAd,
|
|
||||||
copyOriImgUrl,
|
|
||||||
}
|
|
||||||
|
|
||||||
class _Thumbnail extends State<Thumbnail> {
|
class _Thumbnail extends State<Thumbnail> {
|
||||||
Uint8List? _data;
|
Uint8List? _data;
|
||||||
bool _isLoading = false;
|
bool _isLoading = false;
|
||||||
@@ -265,106 +253,13 @@ class _Thumbnail extends State<Thumbnail> {
|
|||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> onItemSelected(_ThumbnailMenu v) async {
|
|
||||||
switch (v) {
|
|
||||||
case _ThumbnailMenu.copyImage:
|
|
||||||
try {
|
|
||||||
await copyImageToClipboard(_data!, ImageFmt.jpg);
|
|
||||||
} catch (err, stack) {
|
|
||||||
_log.warning("Failed to copy image to clipboard: $err\n$stack");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case _ThumbnailMenu.copyImgUrl:
|
|
||||||
try {
|
|
||||||
await copyTextToClipboard(_uri!);
|
|
||||||
} catch (err, stack) {
|
|
||||||
_log.warning("Failed to copy image url to clipboard: $err\n$stack");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case _ThumbnailMenu.saveAs:
|
|
||||||
try {
|
|
||||||
await platformPath.saveFile(_fileName!, "image/jpeg", _data!,
|
|
||||||
dir: _dir);
|
|
||||||
} catch (err, stack) {
|
|
||||||
_log.warning("Failed to save image: $err\n$stack");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case _ThumbnailMenu.markAsNsfw:
|
|
||||||
await _markAsNsfw(true);
|
|
||||||
break;
|
|
||||||
case _ThumbnailMenu.markAsSfw:
|
|
||||||
await _markAsNsfw(false);
|
|
||||||
break;
|
|
||||||
case _ThumbnailMenu.markAsAd:
|
|
||||||
await _markAsAd(true);
|
|
||||||
break;
|
|
||||||
case _ThumbnailMenu.markAsNonAd:
|
|
||||||
await _markAsAd(false);
|
|
||||||
break;
|
|
||||||
case _ThumbnailMenu.copyOriImgUrl:
|
|
||||||
try {
|
|
||||||
final uri = api.getFileUrl(_fileId!);
|
|
||||||
await copyTextToClipboard(uri);
|
|
||||||
} catch (err, stack) {
|
|
||||||
_log.warning(
|
|
||||||
"Failed to copy original image url to clipboard: $err\n$stack");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final isLoading = _data == null && _error == null;
|
final isLoading = _data == null && _error == null;
|
||||||
final isNsfw = widget._pMeta.isNsfw;
|
final isNsfw = widget._pMeta.isNsfw;
|
||||||
final isAd = widget._pMeta.isAd;
|
|
||||||
final i18n = AppLocalizations.of(context)!;
|
final i18n = AppLocalizations.of(context)!;
|
||||||
if (isLoading && !_isLoading) _fetchData();
|
if (isLoading && !_isLoading) _fetchData();
|
||||||
_iconSize ??= Theme.of(context).iconTheme.size;
|
_iconSize ??= Theme.of(context).iconTheme.size;
|
||||||
final iconSize = MediaQuery.of(context).size.width < 400
|
|
||||||
? 14.0
|
|
||||||
: Theme.of(context).iconTheme.size;
|
|
||||||
final moreVertMenu = Positioned(
|
|
||||||
right: 0,
|
|
||||||
top: 0,
|
|
||||||
width: iconSize,
|
|
||||||
height: iconSize,
|
|
||||||
child: PopupMenuButton(
|
|
||||||
child: Icon(Icons.more_vert, size: iconSize),
|
|
||||||
onSelected: (v) {
|
|
||||||
onItemSelected(v);
|
|
||||||
},
|
|
||||||
itemBuilder: (context) {
|
|
||||||
var list = <PopupMenuEntry<_ThumbnailMenu>>[
|
|
||||||
PopupMenuItem(
|
|
||||||
value: _ThumbnailMenu.copyImage,
|
|
||||||
child: Text(i18n.copyImage)),
|
|
||||||
PopupMenuItem(
|
|
||||||
value: _ThumbnailMenu.copyImgUrl,
|
|
||||||
child: Text(i18n.copyImgUrl)),
|
|
||||||
PopupMenuItem(
|
|
||||||
value: _ThumbnailMenu.copyOriImgUrl,
|
|
||||||
child: Text(i18n.copyOriImgUrl)),
|
|
||||||
PopupMenuItem(
|
|
||||||
value: _ThumbnailMenu.saveAs, child: Text(i18n.saveAs)),
|
|
||||||
];
|
|
||||||
if (auth.canEditGallery == true) {
|
|
||||||
list += [
|
|
||||||
const PopupMenuDivider(),
|
|
||||||
PopupMenuItem(
|
|
||||||
value: isNsfw
|
|
||||||
? _ThumbnailMenu.markAsSfw
|
|
||||||
: _ThumbnailMenu.markAsNsfw,
|
|
||||||
child: Text(isNsfw ? i18n.markAsSfw : i18n.markAsNsfw)),
|
|
||||||
PopupMenuItem(
|
|
||||||
value: isAd
|
|
||||||
? _ThumbnailMenu.markAsNonAd
|
|
||||||
: _ThumbnailMenu.markAsAd,
|
|
||||||
child: Text(isAd ? i18n.markAsNonAd : i18n.markAsAd)),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}));
|
|
||||||
String? oUri;
|
String? oUri;
|
||||||
if (_fileId != null) {
|
if (_fileId != null) {
|
||||||
oUri = api.getFileUrl(_fileId!);
|
oUri = api.getFileUrl(_fileId!);
|
||||||
@@ -398,7 +293,6 @@ class _Thumbnail extends State<Thumbnail> {
|
|||||||
},
|
},
|
||||||
child: timg)
|
child: timg)
|
||||||
: timg;
|
: timg;
|
||||||
final cs = Theme.of(context).colorScheme;
|
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
width: widget.width.toDouble(),
|
width: widget.width.toDouble(),
|
||||||
height: widget.height.toDouble(),
|
height: widget.height.toDouble(),
|
||||||
@@ -431,7 +325,6 @@ class _Thumbnail extends State<Thumbnail> {
|
|||||||
color: _iconColor ?? Colors.black),
|
color: _iconColor ?? Colors.black),
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
moreVertMenu
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
: Stack(children: [
|
: Stack(children: [
|
||||||
@@ -439,7 +332,6 @@ class _Thumbnail extends State<Thumbnail> {
|
|||||||
width: widget.width.toDouble(),
|
width: widget.width.toDouble(),
|
||||||
height: widget.height.toDouble(),
|
height: widget.height.toDouble(),
|
||||||
child: img),
|
child: img),
|
||||||
widget.isSelectMode ? Container() : moreVertMenu,
|
|
||||||
Visibility(
|
Visibility(
|
||||||
visible: widget.isSelectMode,
|
visible: widget.isSelectMode,
|
||||||
child: const ModalBarrier(dismissible: false)),
|
child: const ModalBarrier(dismissible: false)),
|
||||||
|
|||||||
Reference in New Issue
Block a user