opt: image save dialog

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-12-29 15:04:03 +08:00
parent bdd927e7e3
commit 85733e071b
3 changed files with 25 additions and 14 deletions

View File

@@ -1,19 +1,22 @@
import 'dart:math';
import 'package:PiliPalaX/common/constants.dart'; import 'package:PiliPalaX/common/constants.dart';
import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; import 'package:PiliPalaX/common/widgets/network_img_layer.dart';
import 'package:PiliPalaX/utils/download.dart'; import 'package:PiliPalaX/utils/download.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
void imageSaveDialog({ void imageSaveDialog({
required BuildContext context, required BuildContext context,
required String? title, required String? title,
required String? cover, required String? cover,
}) { }) {
final double imgWidth = final double imgWidth = min(Get.width, Get.height) - 8 * 2;
MediaQuery.sizeOf(context).width - StyleString.safeSpace * 2;
SmartDialog.show( SmartDialog.show(
animationType: SmartAnimationType.centerScale_otherSlide, animationType: SmartAnimationType.centerScale_otherSlide,
builder: (context) => Container( builder: (context) => Container(
width: imgWidth,
margin: const EdgeInsets.symmetric(horizontal: StyleString.safeSpace), margin: const EdgeInsets.symmetric(horizontal: StyleString.safeSpace),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surface, color: Theme.of(context).colorScheme.surface,
@@ -21,16 +24,18 @@ void imageSaveDialog({
), ),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Stack( Stack(
children: [ children: [
NetworkImgLayer( GestureDetector(
onTap: SmartDialog.dismiss,
child: NetworkImgLayer(
width: imgWidth, width: imgWidth,
height: imgWidth / StyleString.aspectRatio, height: imgWidth / StyleString.aspectRatio,
src: cover, src: cover,
quality: 100, quality: 100,
), ),
),
Positioned( Positioned(
right: 8, right: 8,
top: 8, top: 8,
@@ -39,8 +44,8 @@ void imageSaveDialog({
height: 30, height: 30,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black.withOpacity(0.3), color: Colors.black.withOpacity(0.3),
borderRadius: shape: BoxShape.circle,
const BorderRadius.all(Radius.circular(20))), ),
child: IconButton( child: IconButton(
style: ButtonStyle( style: ButtonStyle(
padding: WidgetStateProperty.all(EdgeInsets.zero), padding: WidgetStateProperty.all(EdgeInsets.zero),

View File

@@ -112,8 +112,8 @@ class GrpcRepo {
e.details?.firstOrNull?.getFieldOrNull(2), e.details?.firstOrNull?.getFieldOrNull(2),
allowMalformed: true, allowMalformed: true,
); );
msg = msg.replaceAll( msg =
RegExp(r"[^a-zA-Z0-9\u4e00-\u9fa5,.;!?,。;!?]"), ''); msg.replaceAll(RegExp(r"[^a-zA-Z0-9\u4e00-\u9fa5,.;?,。;!?]"), '');
if (msg.isNotEmpty) { if (msg.isNotEmpty) {
return {'status': false, 'msg': msg}; return {'status': false, 'msg': msg};
} else { } else {

View File

@@ -1,3 +1,4 @@
import 'package:PiliPalaX/common/widgets/image_save.dart';
import 'package:PiliPalaX/utils/utils.dart'; import 'package:PiliPalaX/utils/utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:PiliPalaX/common/constants.dart'; import 'package:PiliPalaX/common/constants.dart';
@@ -18,8 +19,13 @@ class FavItem extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return InkWell( return InkWell(
onTap: onTap, onTap: onTap,
onLongPress: () => imageSaveDialog(
context: context,
title: favFolderItem.title,
cover: favFolderItem.cover,
),
child: Padding( child: Padding(
padding: const EdgeInsets.fromLTRB(12, 7, 12, 7), padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 5),
child: LayoutBuilder( child: LayoutBuilder(
builder: (context, boxConstraints) { builder: (context, boxConstraints) {
double width = double width =