* opt: live extra

* opt: remove addPointer

* opt: use ssd

* opt: cache svg

* opt: localToGlobal

* opt: disabled icon

* opt: onVideoDetailChange switch

* fix

---------

Co-authored-by: dom <githubaccount56556@proton.me>
This commit is contained in:
My-Responsitories
2026-02-25 18:01:43 +08:00
committed by GitHub
parent 4a3d827f7a
commit e707764f84
19 changed files with 159 additions and 238 deletions

View File

@@ -3,18 +3,16 @@ import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
class DisabledIcon<T extends Widget> extends SingleChildRenderObjectWidget {
class DisabledIcon extends SingleChildRenderObjectWidget {
const DisabledIcon({
super.key,
required T child,
required Widget super.child,
this.disable = false,
this.color,
this.iconSize,
double? lineLengthScale,
StrokeCap? strokeCap,
}) : lineLengthScale = lineLengthScale ?? 0.9,
strokeCap = strokeCap ?? StrokeCap.butt,
super(child: child);
this.lineLengthScale = 0.9,
this.strokeCap = .butt,
});
final bool disable;
final Color? color;
@@ -48,12 +46,12 @@ class DisabledIcon<T extends Widget> extends SingleChildRenderObjectWidget {
..disable = disable
..iconSize =
iconSize ??
(child is Icon ? (child as Icon?)?.size : null) ??
(child is Icon ? (child as Icon).size : null) ??
iconTheme.size ??
24.0
..color =
color ??
(child is Icon ? (child as Icon?)?.color : null) ??
(child is Icon ? (child as Icon).color : null) ??
iconTheme.color!
..strokeCap = strokeCap
..lineLengthScale = lineLengthScale;

View File

@@ -1,8 +1,19 @@
import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart';
import 'package:PiliPlus/common/widgets/gesture/image_tap_gesture_recognizer.dart'
show ImageGestureRecognizerMixin;
import 'package:flutter/gestures.dart';
mixin ImageGestureRecognizerMixin on GestureRecognizer {
int? _pointer;
@override
void addPointer(PointerDownEvent event) {
if (_pointer == event.pointer) {
return;
}
_pointer = event.pointer;
super.addPointer(event);
}
}
typedef IsBoundaryAllowed =
bool Function(Offset? initialPosition, OffsetPair lastPosition);

View File

@@ -1,39 +0,0 @@
import 'package:flutter/gestures.dart'
show
GestureRecognizer,
TapGestureRecognizer,
DoubleTapGestureRecognizer,
PointerDownEvent;
mixin ImageGestureRecognizerMixin on GestureRecognizer {
int? _pointer;
@override
void addPointer(PointerDownEvent event) {
if (_pointer == event.pointer) {
return;
}
_pointer = event.pointer;
super.addPointer(event);
}
}
class ImageTapGestureRecognizer extends TapGestureRecognizer
with ImageGestureRecognizerMixin {
ImageTapGestureRecognizer({
super.debugOwner,
super.supportedDevices,
super.allowedButtonsFilter,
super.preAcceptSlopTolerance,
super.postAcceptSlopTolerance,
});
}
class ImageDoubleTapGestureRecognizer extends DoubleTapGestureRecognizer
with ImageGestureRecognizerMixin {
ImageDoubleTapGestureRecognizer({
super.debugOwner,
super.supportedDevices,
super.allowedButtonsFilter,
});
}

View File

@@ -67,31 +67,6 @@ class CachedNetworkSVGImage extends StatefulWidget {
@override
State<CachedNetworkSVGImage> createState() => _CachedNetworkSVGImageState();
static Future<void> preCache(
String imageUrl, {
String? cacheKey,
BaseCacheManager? cacheManager,
}) {
final key = cacheKey ?? _generateKeyFromUrl(imageUrl);
cacheManager ??= DefaultCacheManager();
return cacheManager.downloadFile(key);
}
static Future<void> clearCacheForUrl(
String imageUrl, {
String? cacheKey,
BaseCacheManager? cacheManager,
}) {
final key = cacheKey ?? _generateKeyFromUrl(imageUrl);
cacheManager ??= DefaultCacheManager();
return cacheManager.removeFile(key);
}
static Future<void> clearCache({BaseCacheManager? cacheManager}) {
cacheManager ??= DefaultCacheManager();
return cacheManager.emptyCache();
}
static String _generateKeyFromUrl(String url) => url.split('?').first;
}

View File

@@ -20,7 +20,6 @@ import 'dart:io' show File, Platform;
import 'package:PiliPlus/common/widgets/colored_box_transition.dart';
import 'package:PiliPlus/common/widgets/flutter/page/page_view.dart';
import 'package:PiliPlus/common/widgets/gesture/image_horizontal_drag_gesture_recognizer.dart';
import 'package:PiliPlus/common/widgets/gesture/image_tap_gesture_recognizer.dart';
import 'package:PiliPlus/common/widgets/image_viewer/image.dart';
import 'package:PiliPlus/common/widgets/image_viewer/loading_indicator.dart';
import 'package:PiliPlus/common/widgets/image_viewer/viewer.dart';
@@ -81,8 +80,8 @@ class _GalleryViewerState extends State<GalleryViewer>
late final PageController _pageController;
late final ImageTapGestureRecognizer _tapGestureRecognizer;
late final ImageDoubleTapGestureRecognizer _doubleTapGestureRecognizer;
late final TapGestureRecognizer _tapGestureRecognizer;
late final DoubleTapGestureRecognizer _doubleTapGestureRecognizer;
late final ImageHorizontalDragGestureRecognizer
_horizontalDragGestureRecognizer;
late final LongPressGestureRecognizer _longPressGestureRecognizer;
@@ -116,13 +115,13 @@ class _GalleryViewerState extends State<GalleryViewer>
_pageController = PageController(initialPage: widget.initIndex);
final gestureSettings = MediaQuery.maybeGestureSettingsOf(Get.context!);
_tapGestureRecognizer = ImageTapGestureRecognizer()
_tapGestureRecognizer = TapGestureRecognizer()
// ..onTap = _onTap
..gestureSettings = gestureSettings;
if (PlatformUtils.isDesktop) {
_tapGestureRecognizer.onSecondaryTapUp = _showDesktopMenu;
}
_doubleTapGestureRecognizer = ImageDoubleTapGestureRecognizer()
_doubleTapGestureRecognizer = DoubleTapGestureRecognizer()
..onDoubleTap = () {}
..gestureSettings = gestureSettings;
_horizontalDragGestureRecognizer = ImageHorizontalDragGestureRecognizer();
@@ -360,7 +359,6 @@ class _GalleryViewerState extends State<GalleryViewer>
onDragStart: _onDragStart,
onDragUpdate: _onDragUpdate,
onDragEnd: _onDragEnd,
tapGestureRecognizer: _tapGestureRecognizer,
doubleTapGestureRecognizer: _doubleTapGestureRecognizer,
horizontalDragGestureRecognizer: _horizontalDragGestureRecognizer,
onChangePage: _onChangePage,
@@ -373,7 +371,6 @@ class _GalleryViewerState extends State<GalleryViewer>
minScale: widget.minScale,
maxScale: widget.maxScale,
containerSize: _containerSize,
tapGestureRecognizer: _tapGestureRecognizer,
doubleTapGestureRecognizer: _doubleTapGestureRecognizer,
horizontalDragGestureRecognizer: _horizontalDragGestureRecognizer,
onChangePage: _onChangePage,
@@ -395,7 +392,6 @@ class _GalleryViewerState extends State<GalleryViewer>
onDragStart: null,
onDragUpdate: null,
onDragEnd: null,
tapGestureRecognizer: _tapGestureRecognizer,
doubleTapGestureRecognizer: _doubleTapGestureRecognizer,
horizontalDragGestureRecognizer:
_horizontalDragGestureRecognizer,
@@ -434,7 +430,6 @@ class _GalleryViewerState extends State<GalleryViewer>
onDragStart: _onDragStart,
onDragUpdate: _onDragUpdate,
onDragEnd: _onDragEnd,
tapGestureRecognizer: _tapGestureRecognizer,
doubleTapGestureRecognizer: _doubleTapGestureRecognizer,
horizontalDragGestureRecognizer:
_horizontalDragGestureRecognizer,

View File

@@ -7,9 +7,9 @@ import 'dart:math' as math;
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/gesture/image_horizontal_drag_gesture_recognizer.dart';
import 'package:PiliPlus/common/widgets/gesture/image_tap_gesture_recognizer.dart';
import 'package:PiliPlus/common/widgets/image_viewer/viewer.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/semantics.dart';
@@ -42,7 +42,6 @@ class Image extends StatefulWidget {
required this.onDragStart,
required this.onDragUpdate,
required this.onDragEnd,
required this.tapGestureRecognizer,
required this.doubleTapGestureRecognizer,
required this.horizontalDragGestureRecognizer,
required this.onChangePage,
@@ -81,7 +80,6 @@ class Image extends StatefulWidget {
required this.onDragStart,
required this.onDragUpdate,
required this.onDragEnd,
required this.tapGestureRecognizer,
required this.doubleTapGestureRecognizer,
required this.horizontalDragGestureRecognizer,
required this.onChangePage,
@@ -127,7 +125,6 @@ class Image extends StatefulWidget {
required this.onDragStart,
required this.onDragUpdate,
required this.onDragEnd,
required this.tapGestureRecognizer,
required this.doubleTapGestureRecognizer,
required this.horizontalDragGestureRecognizer,
required this.onChangePage,
@@ -176,7 +173,6 @@ class Image extends StatefulWidget {
required this.onDragStart,
required this.onDragUpdate,
required this.onDragEnd,
required this.tapGestureRecognizer,
required this.doubleTapGestureRecognizer,
required this.horizontalDragGestureRecognizer,
required this.onChangePage,
@@ -225,7 +221,6 @@ class Image extends StatefulWidget {
required this.onDragStart,
required this.onDragUpdate,
required this.onDragEnd,
required this.tapGestureRecognizer,
required this.doubleTapGestureRecognizer,
required this.horizontalDragGestureRecognizer,
required this.onChangePage,
@@ -285,8 +280,7 @@ class Image extends StatefulWidget {
final ValueChanged<ScaleEndDetails>? onDragEnd;
final ValueChanged<int>? onChangePage;
final ImageTapGestureRecognizer tapGestureRecognizer;
final ImageDoubleTapGestureRecognizer doubleTapGestureRecognizer;
final DoubleTapGestureRecognizer doubleTapGestureRecognizer;
final ImageHorizontalDragGestureRecognizer horizontalDragGestureRecognizer;
@override
@@ -630,7 +624,6 @@ class _ImageState extends State<Image> with WidgetsBindingObserver {
onDragStart: widget.onDragStart,
onDragUpdate: widget.onDragUpdate,
onDragEnd: widget.onDragEnd,
tapGestureRecognizer: widget.tapGestureRecognizer,
doubleTapGestureRecognizer: widget.doubleTapGestureRecognizer,
horizontalDragGestureRecognizer: widget.horizontalDragGestureRecognizer,
onChangePage: widget.onChangePage,

View File

@@ -20,7 +20,6 @@ import 'dart:math' as math;
import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart'
show touchSlopH;
import 'package:PiliPlus/common/widgets/gesture/image_horizontal_drag_gesture_recognizer.dart';
import 'package:PiliPlus/common/widgets/gesture/image_tap_gesture_recognizer.dart';
import 'package:PiliPlus/utils/extension/num_ext.dart';
import 'package:easy_debounce/easy_throttle.dart';
import 'package:flutter/foundation.dart';
@@ -44,7 +43,6 @@ class Viewer extends StatefulWidget {
required this.onDragStart,
required this.onDragUpdate,
required this.onDragEnd,
required this.tapGestureRecognizer,
required this.doubleTapGestureRecognizer,
required this.horizontalDragGestureRecognizer,
required this.onChangePage,
@@ -63,8 +61,7 @@ class Viewer extends StatefulWidget {
final ValueChanged<ScaleEndDetails>? onDragEnd;
final ValueChanged<int>? onChangePage;
final ImageTapGestureRecognizer tapGestureRecognizer;
final ImageDoubleTapGestureRecognizer doubleTapGestureRecognizer;
final DoubleTapGestureRecognizer doubleTapGestureRecognizer;
final ImageHorizontalDragGestureRecognizer horizontalDragGestureRecognizer;
@override
@@ -101,8 +98,7 @@ class _ViewerState extends State<Viewer> with SingleTickerProviderStateMixin {
late Size _imageSize;
late final ImageTapGestureRecognizer _tapGestureRecognizer;
late final ImageDoubleTapGestureRecognizer _doubleTapGestureRecognizer;
late final DoubleTapGestureRecognizer _doubleTapGestureRecognizer;
late final ImageHorizontalDragGestureRecognizer
_horizontalDragGestureRecognizer;
late final ScaleGestureRecognizer _scaleGestureRecognizer;
@@ -153,7 +149,6 @@ class _ViewerState extends State<Viewer> with SingleTickerProviderStateMixin {
duration: const Duration(milliseconds: 300),
)..addListener(_listener);
_tapGestureRecognizer = widget.tapGestureRecognizer;
_doubleTapGestureRecognizer = widget.doubleTapGestureRecognizer;
_horizontalDragGestureRecognizer = widget.horizontalDragGestureRecognizer;
@@ -419,11 +414,9 @@ class _ViewerState extends State<Viewer> with SingleTickerProviderStateMixin {
void _onPointerDown(PointerDownEvent event) {
_scalePos = event.position;
_tapGestureRecognizer.addPointer(event);
_doubleTapGestureRecognizer
..onDoubleTapDown = _onDoubleTapDown
..onDoubleTap = _onDoubleTap
..addPointer(event);
..onDoubleTap = _onDoubleTap;
_horizontalDragGestureRecognizer
..isBoundaryAllowed = _isBoundaryAllowed
..addPointer(event);