From 85733e071b899909c4a365381ebf17f6030659d6 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sun, 29 Dec 2024 15:04:03 +0800 Subject: [PATCH] opt: image save dialog Signed-off-by: bggRGjQaUbCoE --- lib/common/widgets/image_save.dart | 27 ++++++++++++++++----------- lib/grpc/grpc_repo.dart | 4 ++-- lib/pages/fav/widgets/item.dart | 8 +++++++- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/lib/common/widgets/image_save.dart b/lib/common/widgets/image_save.dart index 41ca00a7..28a32582 100644 --- a/lib/common/widgets/image_save.dart +++ b/lib/common/widgets/image_save.dart @@ -1,19 +1,22 @@ +import 'dart:math'; + import 'package:PiliPalaX/common/constants.dart'; import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; import 'package:PiliPalaX/utils/download.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:get/get.dart'; void imageSaveDialog({ required BuildContext context, required String? title, required String? cover, }) { - final double imgWidth = - MediaQuery.sizeOf(context).width - StyleString.safeSpace * 2; + final double imgWidth = min(Get.width, Get.height) - 8 * 2; SmartDialog.show( animationType: SmartAnimationType.centerScale_otherSlide, builder: (context) => Container( + width: imgWidth, margin: const EdgeInsets.symmetric(horizontal: StyleString.safeSpace), decoration: BoxDecoration( color: Theme.of(context).colorScheme.surface, @@ -21,15 +24,17 @@ void imageSaveDialog({ ), child: Column( mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, children: [ Stack( children: [ - NetworkImgLayer( - width: imgWidth, - height: imgWidth / StyleString.aspectRatio, - src: cover, - quality: 100, + GestureDetector( + onTap: SmartDialog.dismiss, + child: NetworkImgLayer( + width: imgWidth, + height: imgWidth / StyleString.aspectRatio, + src: cover, + quality: 100, + ), ), Positioned( right: 8, @@ -38,9 +43,9 @@ void imageSaveDialog({ width: 30, height: 30, decoration: BoxDecoration( - color: Colors.black.withOpacity(0.3), - borderRadius: - const BorderRadius.all(Radius.circular(20))), + color: Colors.black.withOpacity(0.3), + shape: BoxShape.circle, + ), child: IconButton( style: ButtonStyle( padding: WidgetStateProperty.all(EdgeInsets.zero), diff --git a/lib/grpc/grpc_repo.dart b/lib/grpc/grpc_repo.dart index 61dbd7de..3d5c9da2 100644 --- a/lib/grpc/grpc_repo.dart +++ b/lib/grpc/grpc_repo.dart @@ -112,8 +112,8 @@ class GrpcRepo { e.details?.firstOrNull?.getFieldOrNull(2), allowMalformed: true, ); - msg = msg.replaceAll( - RegExp(r"[^a-zA-Z0-9\u4e00-\u9fa5,.;!?,。;!?]"), ''); + msg = + msg.replaceAll(RegExp(r"[^a-zA-Z0-9\u4e00-\u9fa5,.;?,。;!?]"), ''); if (msg.isNotEmpty) { return {'status': false, 'msg': msg}; } else { diff --git a/lib/pages/fav/widgets/item.dart b/lib/pages/fav/widgets/item.dart index e1257071..6facee96 100644 --- a/lib/pages/fav/widgets/item.dart +++ b/lib/pages/fav/widgets/item.dart @@ -1,3 +1,4 @@ +import 'package:PiliPalaX/common/widgets/image_save.dart'; import 'package:PiliPalaX/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:PiliPalaX/common/constants.dart'; @@ -18,8 +19,13 @@ class FavItem extends StatelessWidget { Widget build(BuildContext context) { return InkWell( onTap: onTap, + onLongPress: () => imageSaveDialog( + context: context, + title: favFolderItem.title, + cover: favFolderItem.cover, + ), child: Padding( - padding: const EdgeInsets.fromLTRB(12, 7, 12, 7), + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 5), child: LayoutBuilder( builder: (context, boxConstraints) { double width =