From 17d5e83c4805fc35aa0d769456bddd66591818f3 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sat, 8 Mar 2025 19:13:45 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=94=BB?= =?UTF-8?q?=E5=BB=8A=E5=88=97=E8=A1=A8=E5=8D=A1=E7=89=87=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=8F=AF=E9=80=89=E6=8B=A9=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E5=92=8C=E7=82=B9=E5=87=BB=E4=BA=8B=E4=BB=B6=EF=BC=8C?= =?UTF-8?q?=E6=94=B9=E5=96=84=E7=94=A8=E6=88=B7=E4=BA=A4=E4=BA=92=E4=BD=93?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/components/gallery_list_normal_card.dart | 132 +++++++++++++------ lib/pages/galleries.dart | 12 +- 2 files changed, 103 insertions(+), 41 deletions(-) diff --git a/lib/components/gallery_list_normal_card.dart b/lib/components/gallery_list_normal_card.dart index b067858..adb9cdf 100644 --- a/lib/components/gallery_list_normal_card.dart +++ b/lib/components/gallery_list_normal_card.dart @@ -1,8 +1,12 @@ +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:intl/intl.dart'; import '../api/file.dart'; import '../api/gallery.dart'; import '../globals.dart'; +import '../main.dart'; +import 'rate.dart'; import 'thumbnail.dart'; class GalleryListNormalCard extends StatefulWidget { @@ -30,46 +34,98 @@ class _GalleryListNormalCard extends State { final maxWidth = MediaQuery.of(context).size.width; bool useMobile = maxWidth <= 810; final max = - ((useMobile ? 300 : 400) * MediaQuery.of(context).devicePixelRatio) + ((useMobile ? 150 : 200) * MediaQuery.of(context).devicePixelRatio) .toInt(); final fileId = _pMeta != null ? _files?.files[_pMeta!.token]?.firstOrNull?.id : null; - final card = Card( - child: Row(children: [ - Expanded( - flex: useMobile ? 2 : 3, - child: _pMeta != null - ? Thumbnail(_pMeta!, - key: Key("thumbnail-conver-${widget.gMeta.gid}-$max"), - files: _files, - gid: widget.gMeta.gid, - fileId: fileId, - max: max) - : Container()), - Expanded( - flex: useMobile ? 3 : 7, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(widget.gMeta.title), - Text(widget.gMeta.titleJpn), - Text(widget.gMeta.uploader), - Text(widget.gMeta.category), - Text(widget.gMeta.filecount.toString()), - Text(widget.gMeta.rating.toString()), - ]))) - ])); - final box = SizedBox( - height: useMobile ? 300 : 400, - width: useMobile ? null : 600, - child: card); - return InkWell( - onTap: () { - context.push('/gallery/${widget.gMeta.gid}', - extra: GalleryPageExtra(title: widget.gMeta.preferredTitle)); - }, - child: box); + final locale = MainApp.of(context).lang.toLocale().toString(); + final cs = Theme.of(context).colorScheme; + final thumbnailWidget = _pMeta != null + ? Thumbnail(_pMeta!, + key: Key("thumbnail-conver-${widget.gMeta.gid}-$max"), + files: _files, + gid: widget.gMeta.gid, + fileId: fileId, + max: max) + : Container(); + final mainWidget = Padding( + padding: useMobile + ? const EdgeInsets.symmetric(vertical: 2, horizontal: 8) + : const EdgeInsets.all(16), + child: Column(crossAxisAlignment: CrossAxisAlignment.center, children: [ + SelectableText( + useMobile ? widget.gMeta.preferredTitle : widget.gMeta.title, + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 16, color: cs.primary), + textAlign: TextAlign.center, + minLines: useMobile ? 1 : null, + maxLines: useMobile ? 3 : null), + useMobile || widget.gMeta.titleJpn.isEmpty + ? Container() + : SelectableText(widget.gMeta.titleJpn, + style: TextStyle(color: cs.secondary), + textAlign: TextAlign.center), + Expanded(child: Container()), + Row(crossAxisAlignment: CrossAxisAlignment.end, children: [ + Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + SelectableText.rich(TextSpan( + text: widget.gMeta.uploader, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: cs.primary), + mouseCursor: SystemMouseCursors.click, + recognizer: TapGestureRecognizer() + ..onTap = () { + context.pushNamed("/galleries", + queryParameters: {"uploader": widget.gMeta.uploader}); + })), + Rate(widget.gMeta.rating, fontSize: 14, selectable: true), + SelectableText.rich(TextSpan( + text: widget.gMeta.category, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: cs.primary), + mouseCursor: SystemMouseCursors.click, + recognizer: TapGestureRecognizer() + ..onTap = () { + context.pushNamed("/galleries", + queryParameters: {"category": widget.gMeta.category}); + })) + ]), + Expanded(child: Container()), + Column(crossAxisAlignment: CrossAxisAlignment.end, children: [ + SelectableText("${widget.gMeta.filecount}P", + style: TextStyle( + fontSize: 16, + color: cs.primary, + fontWeight: FontWeight.bold)), + SelectableText( + DateFormat.yMd(locale) + .add_jms() + .format(widget.gMeta.posted.toLocal()), + style: TextStyle( + fontSize: 16, + color: cs.primary, + fontWeight: FontWeight.bold)) + ]), + ]), + ])); + final box = Container( + alignment: Alignment.center, + child: SizedBox( + height: useMobile ? 150 : 200, + width: useMobile ? null : 800, + child: Row(children: [ + useMobile + ? ConstrainedBox( + constraints: BoxConstraints(maxWidth: maxWidth / 2), + child: thumbnailWidget) + : thumbnailWidget, + Expanded(child: mainWidget), + ]))); + final card = Card(child: box); + return card; } } diff --git a/lib/pages/galleries.dart b/lib/pages/galleries.dart index 212a04b..6f63095 100644 --- a/lib/pages/galleries.dart +++ b/lib/pages/galleries.dart @@ -237,9 +237,15 @@ class _GalleriesPage extends State final displayMode = GalleryListDisplayMode .values[prefs.getInt("galleryListDisplayMode") ?? 1]; if (displayMode == GalleryListDisplayMode.normal) { - return GalleryListNormalCard(item, - files: _files, - pMeta: _thumbnails.thumbnails[item.gid]?.unwrapOrNull()); + return InkWell( + onTap: () { + context.push("/gallery/${item.gid}", + extra: GalleryPageExtra(title: item.preferredTitle)); + }, + mouseCursor: SystemMouseCursors.basic, + child: GalleryListNormalCard(item, + files: _files, + pMeta: _thumbnails.thumbnails[item.gid]?.unwrapOrNull())); } return ListTile( title: Text(item.preferredTitle), From bde71f0944bfd0a44434eefdb74824e29a9ded27 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sat, 8 Mar 2025 19:34:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E7=94=BB?= =?UTF-8?q?=E5=BB=8A=E5=88=97=E8=A1=A8=E5=8D=A1=E7=89=87=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E8=B0=83=E6=95=B4=E6=96=87=E6=9C=AC=E8=A1=8C=E6=95=B0?= =?UTF-8?q?=E5=92=8C=E5=8F=AF=E9=80=89=E6=8B=A9=E6=96=87=E6=9C=AC=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E6=94=B9=E5=96=84=E6=98=BE=E7=A4=BA=E6=95=88?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/components/gallery_list_normal_card.dart | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/components/gallery_list_normal_card.dart b/lib/components/gallery_list_normal_card.dart index adb9cdf..17c200e 100644 --- a/lib/components/gallery_list_normal_card.dart +++ b/lib/components/gallery_list_normal_card.dart @@ -46,7 +46,7 @@ class _GalleryListNormalCard extends State { files: _files, gid: widget.gMeta.gid, fileId: fileId, - max: max) + height: max) : Container(); final mainWidget = Padding( padding: useMobile @@ -58,13 +58,21 @@ class _GalleryListNormalCard extends State { style: TextStyle( fontWeight: FontWeight.bold, fontSize: 16, color: cs.primary), textAlign: TextAlign.center, - minLines: useMobile ? 1 : null, - maxLines: useMobile ? 3 : null), + minLines: useMobile ? 1 : 1, + maxLines: useMobile + ? 3 + : widget.gMeta.titleJpn.isEmpty + ? 4 + : 2), useMobile || widget.gMeta.titleJpn.isEmpty ? Container() - : SelectableText(widget.gMeta.titleJpn, + : SelectableText( + widget.gMeta.titleJpn, style: TextStyle(color: cs.secondary), - textAlign: TextAlign.center), + textAlign: TextAlign.center, + maxLines: 2, + minLines: 1, + ), Expanded(child: Container()), Row(crossAxisAlignment: CrossAxisAlignment.end, children: [ Column(crossAxisAlignment: CrossAxisAlignment.start, children: [