From b35e1901f65c6c7e5c2ed57463ce159e11833461 Mon Sep 17 00:00:00 2001 From: Niranjan Dorage Date: Sat, 28 Oct 2023 10:11:06 +0530 Subject: [PATCH 1/8] setting maximum zoom level based on image resolution --- lib/shared/image_viewer.dart | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/lib/shared/image_viewer.dart b/lib/shared/image_viewer.dart index 809285158..5267f8281 100644 --- a/lib/shared/image_viewer.dart +++ b/lib/shared/image_viewer.dart @@ -42,10 +42,8 @@ class _ImageViewerState extends State with TickerProviderStateMixin final GlobalKey _imageViewer = GlobalKey(); final GlobalKey gestureKey = GlobalKey(); bool downloaded = false; - double slideTransparency = 0.92; double imageTransparency = 1.0; - bool maybeSlideZooming = false; bool slideZooming = false; bool fullscreen = false; @@ -53,8 +51,10 @@ class _ImageViewerState extends State with TickerProviderStateMixin /// User Settings bool isUserLoggedIn = false; - bool isDownloadingMedia = false; + late int imagewidth; + late int imageheight; + late double maxzoomlevel = 3; void _maybeSlide(BuildContext context) { setState(() { @@ -113,6 +113,26 @@ class _ImageViewerState extends State with TickerProviderStateMixin ); } + Future getImageSize(String imageUrl, context) async { + final ByteData data = await NetworkAssetBundle(Uri.parse(imageUrl)).load(imageUrl); + final Uint8List bytes = data.buffer.asUint8List(); + final decodedImage = await decodeImageFromList(bytes); + + setState(() { + imagewidth = decodedImage.width; + imageheight = decodedImage.height; + maxzoomlevel = max(imagewidth, imageheight) / 128; + // ignore: avoid_print + print("$imagewidth + $imageheight + $maxzoomlevel"); + }); + } + + @override + void initState() { + super.initState(); + getImageSize(widget.url!, context); + } + @override Widget build(BuildContext context) { AnimationController animationController = AnimationController(duration: const Duration(milliseconds: 140), vsync: this); @@ -241,8 +261,8 @@ class _ImageViewerState extends State with TickerProviderStateMixin return GestureConfig( minScale: 0.8, animationMinScale: 0.8, - maxScale: 4.0, - animationMaxScale: 4.0, + maxScale: maxzoomlevel.toDouble(), + animationMaxScale: maxzoomlevel.toDouble(), speed: 1.0, inertialSpeed: 250.0, initialScale: 1.0, From aa5231ae321cfa61704874e25ec15222b9ce32fa Mon Sep 17 00:00:00 2001 From: Niranjan Dorage Date: Sat, 28 Oct 2023 10:22:31 +0530 Subject: [PATCH 2/8] minor changes --- pubspec.lock | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 2bb38bd8d..502bcb749 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -237,10 +237,10 @@ packages: dependency: transitive description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.17.2" convert: dependency: transitive description: @@ -653,14 +653,6 @@ packages: description: flutter source: sdk version: "0.0.0" - freezed_annotation: - dependency: transitive - description: - name: freezed_annotation - sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d - url: "https://pub.dev" - source: hosted - version: "2.4.1" frontend_server_client: dependency: transitive description: @@ -933,10 +925,10 @@ packages: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.9.1" mime: dependency: transitive description: @@ -1356,18 +1348,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.1" stream_transform: dependency: "direct main" description: @@ -1412,10 +1404,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.6.0" text_scroll: dependency: "direct main" description: @@ -1580,10 +1572,10 @@ packages: dependency: transitive description: name: web - sha256: "14f1f70c51119012600c5f1f60ca68efda5a9b6077748163c6af2893ec5df8fc" + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 url: "https://pub.dev" source: hosted - version: "0.2.1-beta" + version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -1665,5 +1657,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0-157.0.dev <4.0.0" + dart: ">=3.1.0 <4.0.0" flutter: ">=3.13.0" From f43e18a8fc4165c9bf862b73ad79bc4c5c8d5c4d Mon Sep 17 00:00:00 2001 From: Niranjan Dorage Date: Sat, 28 Oct 2023 11:37:45 +0530 Subject: [PATCH 3/8] contribution info updated --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a13ce49b..65c87566d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ - Added support for receiving share intents. Android only. - contribution from @ggichure ### Changed +- Dynamic Maximum Zoom Level Based on Image Resolution - contribution from @Niranjan-Dorage - Collapsed comments are easier to expand - contribution from @micahmo - Show up to 99 before adding + in the unread count - contribution from @micahmo - Migrate from old BottomNavigationBar to NavigationBar - contribution from @ggichure From 772f98efbdc27bdc76fd3639eb0c6f135f894c3a Mon Sep 17 00:00:00 2001 From: Niranjan Dorage Date: Sat, 28 Oct 2023 21:01:37 +0530 Subject: [PATCH 4/8] changes asked by admin done --- lib/shared/image_viewer.dart | 375 ++++++++++++++++++----------------- pubspec.lock | 8 + 2 files changed, 197 insertions(+), 186 deletions(-) diff --git a/lib/shared/image_viewer.dart b/lib/shared/image_viewer.dart index 5267f8281..23bfa6abb 100644 --- a/lib/shared/image_viewer.dart +++ b/lib/shared/image_viewer.dart @@ -16,6 +16,7 @@ import 'package:device_info_plus/device_info_plus.dart'; import 'package:thunder/shared/snackbar.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:thunder/utils/image.dart'; class ImageViewer extends StatefulWidget { final String? url; @@ -48,12 +49,13 @@ class _ImageViewerState extends State with TickerProviderStateMixin bool slideZooming = false; bool fullscreen = false; Offset downCoord = Offset.zero; + bool areImageDimensionsLoaded = false; /// User Settings bool isUserLoggedIn = false; bool isDownloadingMedia = false; - late int imagewidth; - late int imageheight; + late double imagewidth = 0; + late double imageheight = 0; late double maxzoomlevel = 3; void _maybeSlide(BuildContext context) { @@ -114,16 +116,15 @@ class _ImageViewerState extends State with TickerProviderStateMixin } Future getImageSize(String imageUrl, context) async { - final ByteData data = await NetworkAssetBundle(Uri.parse(imageUrl)).load(imageUrl); - final Uint8List bytes = data.buffer.asUint8List(); - final decodedImage = await decodeImageFromList(bytes); + retrieveImageDimensions(imageUrl); + Size decodedImage = await retrieveImageDimensions(imageUrl); setState(() { imagewidth = decodedImage.width; imageheight = decodedImage.height; maxzoomlevel = max(imagewidth, imageheight) / 128; - // ignore: avoid_print - print("$imagewidth + $imageheight + $maxzoomlevel"); + debugPrint("$imagewidth + $imageheight + $maxzoomlevel"); + areImageDimensionsLoaded = true; }); } @@ -138,7 +139,6 @@ class _ImageViewerState extends State with TickerProviderStateMixin AnimationController animationController = AnimationController(duration: const Duration(milliseconds: 140), vsync: this); Function() animationListener = () {}; Animation? animation; - return ScaffoldMessenger( key: _imageViewer, child: Stack( @@ -162,194 +162,197 @@ class _ImageViewerState extends State with TickerProviderStateMixin children: [ Expanded( child: GestureDetector( - onLongPress: () { - HapticFeedback.lightImpact(); - setState(() { - fullscreen = !fullscreen; - }); - }, - onTap: () { - if (!fullscreen) { - slidePagekey.currentState!.popPage(); - Navigator.pop(context); - } else { + onLongPress: () { + HapticFeedback.lightImpact(); setState(() { - fullscreen = false; + fullscreen = !fullscreen; }); - } - }, - // Start doubletap zoom if conditions are met - onVerticalDragStart: maybeSlideZooming - ? (details) { - setState(() { - slideZooming = true; - }); - } - : null, - // Zoom image in an out based on movement in vertical axis if conditions are met - onVerticalDragUpdate: maybeSlideZooming || slideZooming - ? (details) { - // Need to catch the drag during "maybe" phase or it wont activate fast enough - if (slideZooming) { - double newScale = max(gestureKey.currentState!.gestureDetails!.totalScale! * (1 + (details.delta.dy / 150)), 1); - gestureKey.currentState?.handleDoubleTap(scale: newScale, doubleTapPosition: gestureKey.currentState!.pointerDownPosition); - } - } - : null, - // End doubltap zoom - onVerticalDragEnd: slideZooming - ? (details) { - setState(() { - slideZooming = false; - }); - } - : null, - child: Listener( - // Start watching for double tap zoom - onPointerUp: (details) { - downCoord = details.position; - if (!slideZooming) { - _maybeSlide(context); + }, + onTap: () { + if (!fullscreen) { + slidePagekey.currentState!.popPage(); + Navigator.pop(context); + } else { + setState(() { + fullscreen = false; + }); } }, - child: ExtendedImageSlidePage( - key: slidePagekey, - slideAxis: SlideAxis.both, - slideType: SlideType.onlyImage, - slidePageBackgroundHandler: (offset, pageSize) { - return Colors.transparent; - }, - onSlidingPage: (state) { - // Fade out image and background when sliding to dismiss - var offset = state.offset; - var pageSize = state.pageSize; - - var scale = offset.distance / Offset(pageSize.width, pageSize.height).distance; - - if (state.isSliding) { - setState(() { - slideTransparency = 0.9 - min(0.9, scale * 0.5); - imageTransparency = 1.0 - min(1.0, scale * 10); - }); - } - }, - slideEndHandler: ( - // Decrease slide to dismiss threshold so it can be done easier - Offset offset, { - ExtendedImageSlidePageState? state, - ScaleEndDetails? details, - }) { - if (state != null) { - var offset = state.offset; - var pageSize = state.pageSize; - return offset.distance.greaterThan(Offset(pageSize.width, pageSize.height).distance / 10); - } - return true; - }, - child: widget.url != null - ? ExtendedImage.network( - widget.url!, - color: Colors.white.withOpacity(imageTransparency), - colorBlendMode: BlendMode.dstIn, - enableSlideOutPage: true, - mode: ExtendedImageMode.gesture, - extendedImageGestureKey: gestureKey, - cache: true, - clearMemoryCacheWhenDispose: false, - cacheMaxAge: const Duration(minutes: 1), - initGestureConfigHandler: (ExtendedImageState state) { - return GestureConfig( - minScale: 0.8, - animationMinScale: 0.8, - maxScale: maxzoomlevel.toDouble(), - animationMaxScale: maxzoomlevel.toDouble(), - speed: 1.0, - inertialSpeed: 250.0, - initialScale: 1.0, - inPageView: false, - initialAlignment: InitialAlignment.center, - reverseMousePointerScrollDirection: true, - gestureDetailsIsChanged: (GestureDetails? details) {}, - ); + // Start doubletap zoom if conditions are met + onVerticalDragStart: maybeSlideZooming + ? (details) { + setState(() { + slideZooming = true; + }); + } + : null, + // Zoom image in an out based on movement in vertical axis if conditions are met + onVerticalDragUpdate: maybeSlideZooming || slideZooming + ? (details) { + // Need to catch the drag during "maybe" phase or it wont activate fast enough + if (slideZooming) { + double newScale = max(gestureKey.currentState!.gestureDetails!.totalScale! * (1 + (details.delta.dy / 150)), 1); + gestureKey.currentState?.handleDoubleTap(scale: newScale, doubleTapPosition: gestureKey.currentState!.pointerDownPosition); + } + } + : null, + // End doubltap zoom + onVerticalDragEnd: slideZooming + ? (details) { + setState(() { + slideZooming = false; + }); + } + : null, + child: areImageDimensionsLoaded // Only display the image if dimensions are loaded + ? Listener( + // Start watching for double tap zoom + onPointerUp: (details) { + downCoord = details.position; + if (!slideZooming) { + _maybeSlide(context); + } + }, + child: ExtendedImageSlidePage( + key: slidePagekey, + slideAxis: SlideAxis.both, + slideType: SlideType.onlyImage, + slidePageBackgroundHandler: (offset, pageSize) { + return Colors.transparent; }, - onDoubleTap: (ExtendedImageGestureState state) { - var pointerDownPosition = state.pointerDownPosition; - double begin = state.gestureDetails!.totalScale!; - double end; - - animation?.removeListener(animationListener); - animationController.stop(); - animationController.reset(); - - if (begin == 1) { - end = 2; - } else if (begin > 1.99 && begin < 2.01) { - end = 4; - } else { - end = 1; + onSlidingPage: (state) { + // Fade out image and background when sliding to dismiss + var offset = state.offset; + var pageSize = state.pageSize; + + var scale = offset.distance / Offset(pageSize.width, pageSize.height).distance; + + if (state.isSliding) { + setState(() { + slideTransparency = 0.9 - min(0.9, scale * 0.5); + imageTransparency = 1.0 - min(1.0, scale * 10); + }); } - animationListener = () { - state.handleDoubleTap(scale: animation!.value, doubleTapPosition: pointerDownPosition); - }; - animation = animationController.drive(Tween(begin: begin, end: end)); - - animation!.addListener(animationListener); - - animationController.forward(); - }, - ) - : ExtendedImage.memory( - widget.bytes!, - color: Colors.white.withOpacity(imageTransparency), - colorBlendMode: BlendMode.dstIn, - enableSlideOutPage: true, - mode: ExtendedImageMode.gesture, - extendedImageGestureKey: gestureKey, - clearMemoryCacheWhenDispose: true, - initGestureConfigHandler: (ExtendedImageState state) { - return GestureConfig( - minScale: 0.8, - animationMinScale: 0.8, - maxScale: 4.0, - animationMaxScale: 4.0, - speed: 1.0, - inertialSpeed: 250.0, - initialScale: 1.0, - inPageView: false, - initialAlignment: InitialAlignment.center, - reverseMousePointerScrollDirection: true, - gestureDetailsIsChanged: (GestureDetails? details) {}, - ); }, - onDoubleTap: (ExtendedImageGestureState state) { - var pointerDownPosition = state.pointerDownPosition; - double begin = state.gestureDetails!.totalScale!; - double end; - - animation?.removeListener(animationListener); - animationController.stop(); - animationController.reset(); - - if (begin == 1) { - end = 2; - } else if (begin > 1.99 && begin < 2.01) { - end = 4; - } else { - end = 1; + slideEndHandler: ( + // Decrease slide to dismiss threshold so it can be done easier + Offset offset, { + ExtendedImageSlidePageState? state, + ScaleEndDetails? details, + }) { + if (state != null) { + var offset = state.offset; + var pageSize = state.pageSize; + return offset.distance.greaterThan(Offset(pageSize.width, pageSize.height).distance / 10); } - animationListener = () { - state.handleDoubleTap(scale: animation!.value, doubleTapPosition: pointerDownPosition); - }; - animation = animationController.drive(Tween(begin: begin, end: end)); - - animation!.addListener(animationListener); - - animationController.forward(); + return true; }, + child: widget.url != null + ? ExtendedImage.network( + widget.url!, + color: Colors.white.withOpacity(imageTransparency), + colorBlendMode: BlendMode.dstIn, + enableSlideOutPage: true, + mode: ExtendedImageMode.gesture, + extendedImageGestureKey: gestureKey, + cache: true, + clearMemoryCacheWhenDispose: false, + cacheMaxAge: const Duration(minutes: 1), + initGestureConfigHandler: (ExtendedImageState state) { + return GestureConfig( + minScale: 0.8, + animationMinScale: 0.8, + maxScale: maxzoomlevel.toDouble(), + animationMaxScale: maxzoomlevel.toDouble(), + speed: 1.0, + inertialSpeed: 250.0, + initialScale: 1.0, + inPageView: false, + initialAlignment: InitialAlignment.center, + reverseMousePointerScrollDirection: true, + gestureDetailsIsChanged: (GestureDetails? details) {}, + ); + }, + onDoubleTap: (ExtendedImageGestureState state) { + var pointerDownPosition = state.pointerDownPosition; + double begin = state.gestureDetails!.totalScale!; + double end; + + animation?.removeListener(animationListener); + animationController.stop(); + animationController.reset(); + + if (begin == 1) { + end = 2; + } else if (begin > 1.99 && begin < 2.01) { + end = 4; + } else { + end = 1; + } + animationListener = () { + state.handleDoubleTap(scale: animation!.value, doubleTapPosition: pointerDownPosition); + }; + animation = animationController.drive(Tween(begin: begin, end: end)); + + animation!.addListener(animationListener); + + animationController.forward(); + }, + ) + : ExtendedImage.memory( + widget.bytes!, + color: Colors.white.withOpacity(imageTransparency), + colorBlendMode: BlendMode.dstIn, + enableSlideOutPage: true, + mode: ExtendedImageMode.gesture, + extendedImageGestureKey: gestureKey, + clearMemoryCacheWhenDispose: true, + initGestureConfigHandler: (ExtendedImageState state) { + return GestureConfig( + minScale: 0.8, + animationMinScale: 0.8, + maxScale: 4.0, + animationMaxScale: 4.0, + speed: 1.0, + inertialSpeed: 250.0, + initialScale: 1.0, + inPageView: false, + initialAlignment: InitialAlignment.center, + reverseMousePointerScrollDirection: true, + gestureDetailsIsChanged: (GestureDetails? details) {}, + ); + }, + onDoubleTap: (ExtendedImageGestureState state) { + var pointerDownPosition = state.pointerDownPosition; + double begin = state.gestureDetails!.totalScale!; + double end; + + animation?.removeListener(animationListener); + animationController.stop(); + animationController.reset(); + + if (begin == 1) { + end = 2; + } else if (begin > 1.99 && begin < 2.01) { + end = 4; + } else { + end = 1; + } + animationListener = () { + state.handleDoubleTap(scale: animation!.value, doubleTapPosition: pointerDownPosition); + }; + animation = animationController.drive(Tween(begin: begin, end: end)); + + animation!.addListener(animationListener); + + animationController.forward(); + }, + ), ), - ), - ), - ), + ) + : const Center( + child: CircularProgressIndicator(), + )), ), AnimatedOpacity( opacity: fullscreen ? 0.0 : 1.0, diff --git a/pubspec.lock b/pubspec.lock index 502bcb749..81d746176 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -653,6 +653,14 @@ packages: description: flutter source: sdk version: "0.0.0" + freezed_annotation: + dependency: transitive + description: + name: freezed_annotation + sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d + url: "https://pub.dev" + source: hosted + version: "2.4.1" frontend_server_client: dependency: transitive description: From f463061da84185d6c85f4e231864b14aa2934e34 Mon Sep 17 00:00:00 2001 From: Niranjan Dorage Date: Sat, 30 Dec 2023 10:07:47 +0530 Subject: [PATCH 5/8] fix: now retrieving dimentions after initstate --- lib/shared/image_viewer.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/shared/image_viewer.dart b/lib/shared/image_viewer.dart index b51ba342f..239589408 100644 --- a/lib/shared/image_viewer.dart +++ b/lib/shared/image_viewer.dart @@ -112,7 +112,6 @@ class _ImageViewerState extends State with TickerProviderStateMixin } Future getImageSize(String imageUrl, context) async { - retrieveImageDimensions(imageUrl); Size decodedImage = await retrieveImageDimensions(imageUrl); setState(() { @@ -127,7 +126,9 @@ class _ImageViewerState extends State with TickerProviderStateMixin @override void initState() { super.initState(); - getImageSize(widget.url!, context); + WidgetsBinding.instance.addPostFrameCallback((_) { + getImageSize(widget.url!, context); + }); } @override From f6fd7933fc14a59eab9b8e3b50596b1801c403b0 Mon Sep 17 00:00:00 2001 From: Niranjan Dorage Date: Thu, 11 Jan 2024 22:49:45 +0530 Subject: [PATCH 6/8] env file removed --- .env | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index 95ca1d414..000000000 --- a/.env +++ /dev/null @@ -1 +0,0 @@ -# Empty Environment File \ No newline at end of file From 00184a8f86abade0095cc35b1e23d18d047b6ab1 Mon Sep 17 00:00:00 2001 From: Niranjan Dorage Date: Thu, 11 Jan 2024 22:57:40 +0530 Subject: [PATCH 7/8] fix: camel case added --- lib/shared/image_viewer.dart | 18 +++++++++--------- pubspec.lock | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/shared/image_viewer.dart b/lib/shared/image_viewer.dart index 239589408..72b943698 100644 --- a/lib/shared/image_viewer.dart +++ b/lib/shared/image_viewer.dart @@ -56,9 +56,9 @@ class _ImageViewerState extends State with TickerProviderStateMixin /// User Settings bool isUserLoggedIn = false; bool isDownloadingMedia = false; - late double imagewidth = 0; - late double imageheight = 0; - late double maxzoomlevel = 3; + late double imageWidth = 0; + late double imageHeight = 0; + late double maxZoomLevel = 3; void _maybeSlide(BuildContext context) { setState(() { @@ -115,10 +115,10 @@ class _ImageViewerState extends State with TickerProviderStateMixin Size decodedImage = await retrieveImageDimensions(imageUrl); setState(() { - imagewidth = decodedImage.width; - imageheight = decodedImage.height; - maxzoomlevel = max(imagewidth, imageheight) / 128; - debugPrint("$imagewidth + $imageheight + $maxzoomlevel"); + imageWidth = decodedImage.width; + imageHeight = decodedImage.height; + maxZoomLevel = max(imageWidth, imageHeight) / 128; + debugPrint("$imageWidth + $imageHeight + $maxZoomLevel"); areImageDimensionsLoaded = true; }); } @@ -259,8 +259,8 @@ class _ImageViewerState extends State with TickerProviderStateMixin return GestureConfig( minScale: 0.8, animationMinScale: 0.8, - maxScale: maxzoomlevel.toDouble(), - animationMaxScale: maxzoomlevel.toDouble(), + maxScale: maxZoomLevel.toDouble(), + animationMaxScale: maxZoomLevel.toDouble(), speed: 1.0, inertialSpeed: 250.0, initialScale: 1.0, diff --git a/pubspec.lock b/pubspec.lock index e46680689..aa7b4e838 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -549,7 +549,7 @@ packages: sha256: d4dd7ce9a90f52571c77c688d7cdff8c1b3af34be9ef77714f25be95dd88a8f3 url: "https://pub.dev" source: hosted - version: "2.0.0-beta+1" + version: "2.0.0-beta.1" flutter_displaymode: dependency: "direct main" description: From 8c656afdc7cabbd6181ab8ee096803e0abbb6bc3 Mon Sep 17 00:00:00 2001 From: Hamlet Jiang Su Date: Thu, 11 Jan 2024 13:44:58 -0800 Subject: [PATCH 8/8] moved changelog entry to proper version --- CHANGELOG.md | 2 +- pubspec.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54b6cf894..0f5ce1153 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ## Changed - Small UI adjustments for account switcher +- Dynamic Maximum Zoom Level Based on Image Resolution - contribution from @Niranjan-Dorage ### Fixed - Fixed issue where Thunder was being locked to 60Hz on 120Hz displays on Android @@ -63,7 +64,6 @@ - Added support for display cross-posts - contribution from @micahmo ### Changed -- Dynamic Maximum Zoom Level Based on Image Resolution - contribution from @Niranjan-Dorage - Collapsed comments are easier to expand - contribution from @micahmo - Show up to 99 before adding + in the unread count - contribution from @micahmo - Migrate from old BottomNavigationBar to NavigationBar - contribution from @ggichure diff --git a/pubspec.lock b/pubspec.lock index e46680689..aa7b4e838 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -549,7 +549,7 @@ packages: sha256: d4dd7ce9a90f52571c77c688d7cdff8c1b3af34be9ef77714f25be95dd88a8f3 url: "https://pub.dev" source: hosted - version: "2.0.0-beta+1" + version: "2.0.0-beta.1" flutter_displaymode: dependency: "direct main" description: