From 24f9baa7dc3f21f0e4cab916a6ceed1e2a7bf11d Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sat, 16 Sep 2023 21:46:03 +0800 Subject: [PATCH] fix tags panel may overscroll on iOS --- lib/components/tags.dart | 5 +++++ lib/platform/ua.dart | 1 + lib/platform/ua_none.dart | 2 ++ lib/platform/ua_web.dart | 9 +++++++++ lib/utils.dart | 1 + pubspec.lock | 8 ++++++++ pubspec.yaml | 1 + 7 files changed, 27 insertions(+) create mode 100644 lib/platform/ua.dart create mode 100644 lib/platform/ua_none.dart create mode 100644 lib/platform/ua_web.dart diff --git a/lib/components/tags.dart b/lib/components/tags.dart index d52daac..8432c26 100644 --- a/lib/components/tags.dart +++ b/lib/components/tags.dart @@ -3,6 +3,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import '../api/gallery.dart'; import '../globals.dart'; import '../main.dart'; +import '../platform/ua.dart' as ua; +import '../utils.dart'; import 'tag.dart'; import 'tag_tooltip.dart'; import 'scroll_parent.dart'; @@ -52,6 +54,9 @@ class _TagsPanel extends State { final stt = prefs.getBool("showTranslatedTag") ?? MainApp.of(context).lang.toLocale().languageCode == "zh"; final re = ListView.builder( + physics: isIOS || ua.isSafari + ? const ClampingScrollPhysics() + : null, padding: const EdgeInsets.all(8), itemCount: data!.length, itemBuilder: (context, index) { diff --git a/lib/platform/ua.dart b/lib/platform/ua.dart new file mode 100644 index 0000000..981775b --- /dev/null +++ b/lib/platform/ua.dart @@ -0,0 +1 @@ +export 'ua_none.dart' if (dart.library.html) 'ua_web.dart'; diff --git a/lib/platform/ua_none.dart b/lib/platform/ua_none.dart new file mode 100644 index 0000000..5796a91 --- /dev/null +++ b/lib/platform/ua_none.dart @@ -0,0 +1,2 @@ +bool get isSafari => false; +bool get isMobile => false; diff --git a/lib/platform/ua_web.dart b/lib/platform/ua_web.dart new file mode 100644 index 0000000..384a424 --- /dev/null +++ b/lib/platform/ua_web.dart @@ -0,0 +1,9 @@ +// ignore: avoid_web_libraries_in_flutter +import 'dart:html'; +import 'package:user_agent_analyzer/user_agent_analyzer.dart'; + +UserAgent? _ua; + +UserAgent get ua => _ua ??= UserAgent(window.navigator.userAgent); +bool get isSafari => ua.isSafari; +bool get isMobile => ua.isMobile; diff --git a/lib/utils.dart b/lib/utils.dart index 203fea2..94ebc1c 100644 --- a/lib/utils.dart +++ b/lib/utils.dart @@ -5,6 +5,7 @@ bool get isDesktop => !kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS); bool get isWindows => !kIsWeb && Platform.isWindows; bool get isAndroid => !kIsWeb && Platform.isAndroid; +bool get isIOS => !kIsWeb && Platform.isIOS; String? getFilenameFromContentDisposition(String? contentDisposition) { if (contentDisposition == null) { diff --git a/pubspec.lock b/pubspec.lock index f7b6ed4..fc76759 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -883,6 +883,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.2" + user_agent_analyzer: + dependency: "direct main" + description: + name: user_agent_analyzer + sha256: "19f8099f09e4800c3f58601c053db66592e8cd6e6a34ab3b9c21a51e0e245e28" + url: "https://pub.dev" + source: hosted + version: "5.0.0" uuid: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 47ca16b..d569f7b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -35,6 +35,7 @@ dependencies: shared_preferences: ^2.2.0 super_clipboard: ^0.6.4 super_context_menu: ^0.6.4 + user_agent_analyzer: ^5.0.0 window_manager: ^0.3.6 dependency_overrides: