extracted/renamed magnifier to its own package

This commit is contained in:
Thibault Deckers 2022-11-11 12:29:18 +01:00
parent 08db29ff9e
commit 6cf5755cb2
30 changed files with 161 additions and 73 deletions

View file

@ -4,7 +4,7 @@ import 'dart:math';
import 'package:aves/model/entry.dart'; import 'package:aves/model/entry.dart';
import 'package:aves/model/settings/enums/enums.dart'; import 'package:aves/model/settings/enums/enums.dart';
import 'package:aves/theme/durations.dart'; import 'package:aves/theme/durations.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_level.dart'; import 'package:aves_magnifier/aves_magnifier.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
class ViewerController { class ViewerController {

View file

@ -3,8 +3,7 @@ import 'package:aves/model/settings/enums/accessibility_animations.dart';
import 'package:aves/model/settings/enums/viewer_transition.dart'; import 'package:aves/model/settings/enums/viewer_transition.dart';
import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/settings/settings.dart';
import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/widgets/common/magnifier/pan/gesture_detector_scope.dart'; import 'package:aves_magnifier/aves_magnifier.dart';
import 'package:aves/widgets/common/magnifier/pan/scroll_physics.dart';
import 'package:aves/widgets/viewer/controller.dart'; import 'package:aves/widgets/viewer/controller.dart';
import 'package:aves/widgets/viewer/multipage/conductor.dart'; import 'package:aves/widgets/viewer/multipage/conductor.dart';
import 'package:aves/widgets/viewer/page_entry_builder.dart'; import 'package:aves/widgets/viewer/page_entry_builder.dart';

View file

@ -7,11 +7,11 @@ import 'package:aves/model/entry.dart';
import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/settings/settings.dart';
import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/theme/durations.dart'; import 'package:aves/theme/durations.dart';
import 'package:aves/widgets/common/magnifier/pan/scroll_physics.dart';
import 'package:aves/widgets/viewer/controller.dart'; import 'package:aves/widgets/viewer/controller.dart';
import 'package:aves/widgets/viewer/entry_horizontal_pager.dart'; import 'package:aves/widgets/viewer/entry_horizontal_pager.dart';
import 'package:aves/widgets/viewer/info/info_page.dart'; import 'package:aves/widgets/viewer/info/info_page.dart';
import 'package:aves/widgets/viewer/notifications.dart'; import 'package:aves/widgets/viewer/notifications.dart';
import 'package:aves_magnifier/aves_magnifier.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';

View file

@ -6,11 +6,11 @@ import 'package:aves/model/source/collection_source.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/empty.dart'; import 'package:aves/widgets/common/identity/empty.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_level.dart';
import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves/widgets/common/providers/media_query_data_provider.dart';
import 'package:aves/widgets/viewer/controller.dart'; import 'package:aves/widgets/viewer/controller.dart';
import 'package:aves/widgets/viewer/entry_viewer_page.dart'; import 'package:aves/widgets/viewer/entry_viewer_page.dart';
import 'package:aves/widgets/viewer/entry_viewer_stack.dart'; import 'package:aves/widgets/viewer/entry_viewer_stack.dart';
import 'package:aves_magnifier/aves_magnifier.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class ScreenSaverPage extends StatefulWidget { class ScreenSaverPage extends StatefulWidget {

View file

@ -9,11 +9,11 @@ import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/collection/collection_page.dart'; import 'package:aves/widgets/collection/collection_page.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/empty.dart'; import 'package:aves/widgets/common/identity/empty.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_level.dart';
import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves/widgets/common/providers/media_query_data_provider.dart';
import 'package:aves/widgets/viewer/controller.dart'; import 'package:aves/widgets/viewer/controller.dart';
import 'package:aves/widgets/viewer/entry_viewer_page.dart'; import 'package:aves/widgets/viewer/entry_viewer_page.dart';
import 'package:aves/widgets/viewer/entry_viewer_stack.dart'; import 'package:aves/widgets/viewer/entry_viewer_stack.dart';
import 'package:aves_magnifier/aves_magnifier.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';

View file

@ -1,6 +1,5 @@
import 'package:aves/model/entry.dart'; import 'package:aves/model/entry.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_boundaries.dart'; import 'package:aves_magnifier/aves_magnifier.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_level.dart';
import 'package:aves/widgets/viewer/visual/state.dart'; import 'package:aves/widgets/viewer/visual/state.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';

View file

@ -9,12 +9,6 @@ import 'package:aves/model/settings/settings.dart';
import 'package:aves/theme/durations.dart'; import 'package:aves/theme/durations.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/action_mixins/feedback.dart'; import 'package:aves/widgets/common/action_mixins/feedback.dart';
import 'package:aves/widgets/common/magnifier/controller/controller.dart';
import 'package:aves/widgets/common/magnifier/controller/state.dart';
import 'package:aves/widgets/common/magnifier/magnifier.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_boundaries.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_level.dart';
import 'package:aves/widgets/common/magnifier/scale/state.dart';
import 'package:aves/widgets/common/thumbnail/image.dart'; import 'package:aves/widgets/common/thumbnail/image.dart';
import 'package:aves/widgets/viewer/controller.dart'; import 'package:aves/widgets/viewer/controller.dart';
import 'package:aves/widgets/viewer/hero.dart'; import 'package:aves/widgets/viewer/hero.dart';
@ -28,6 +22,7 @@ import 'package:aves/widgets/viewer/visual/state.dart';
import 'package:aves/widgets/viewer/visual/subtitle/subtitle.dart'; import 'package:aves/widgets/viewer/visual/subtitle/subtitle.dart';
import 'package:aves/widgets/viewer/visual/vector.dart'; import 'package:aves/widgets/viewer/visual/vector.dart';
import 'package:aves/widgets/viewer/visual/video.dart'; import 'package:aves/widgets/viewer/visual/video.dart';
import 'package:aves_magnifier/aves_magnifier.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:decorated_icon/decorated_icon.dart'; import 'package:decorated_icon/decorated_icon.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -55,17 +50,17 @@ class EntryPageView extends StatefulWidget {
class _EntryPageViewState extends State<EntryPageView> with SingleTickerProviderStateMixin { class _EntryPageViewState extends State<EntryPageView> with SingleTickerProviderStateMixin {
late ValueNotifier<ViewState> _viewStateNotifier; late ValueNotifier<ViewState> _viewStateNotifier;
late MagnifierController _magnifierController; late AvesMagnifierController _magnifierController;
final List<StreamSubscription> _subscriptions = []; final List<StreamSubscription> _subscriptions = [];
ImageStream? _videoCoverStream; ImageStream? _videoCoverStream;
late ImageStreamListener _videoCoverStreamListener; late ImageStreamListener _videoCoverStreamListener;
final ValueNotifier<ImageInfo?> _videoCoverInfoNotifier = ValueNotifier(null); final ValueNotifier<ImageInfo?> _videoCoverInfoNotifier = ValueNotifier(null);
final ValueNotifier<Widget?> _actionFeedbackChildNotifier = ValueNotifier(null); final ValueNotifier<Widget?> _actionFeedbackChildNotifier = ValueNotifier(null);
MagnifierController? _dismissedCoverMagnifierController; AvesMagnifierController? _dismissedCoverMagnifierController;
MagnifierController get dismissedCoverMagnifierController { AvesMagnifierController get dismissedCoverMagnifierController {
_dismissedCoverMagnifierController ??= MagnifierController(); _dismissedCoverMagnifierController ??= AvesMagnifierController();
return _dismissedCoverMagnifierController!; return _dismissedCoverMagnifierController!;
} }
@ -107,7 +102,7 @@ class _EntryPageViewState extends State<EntryPageView> with SingleTickerProvider
void _registerWidget(EntryPageView widget) { void _registerWidget(EntryPageView widget) {
final entry = widget.pageEntry; final entry = widget.pageEntry;
_viewStateNotifier = context.read<ViewStateConductor>().getOrCreateController(entry); _viewStateNotifier = context.read<ViewStateConductor>().getOrCreateController(entry);
_magnifierController = MagnifierController(); _magnifierController = AvesMagnifierController();
_subscriptions.add(_magnifierController.stateStream.listen(_onViewStateChanged)); _subscriptions.add(_magnifierController.stateStream.listen(_onViewStateChanged));
_subscriptions.add(_magnifierController.scaleBoundariesStream.listen(_onViewScaleBoundariesChanged)); _subscriptions.add(_magnifierController.scaleBoundariesStream.listen(_onViewScaleBoundariesChanged));
if (entry.isVideo) { if (entry.isVideo) {
@ -376,7 +371,7 @@ class _EntryPageViewState extends State<EntryPageView> with SingleTickerProvider
} }
Widget _buildMagnifier({ Widget _buildMagnifier({
MagnifierController? controller, AvesMagnifierController? controller,
Size? displaySize, Size? displaySize,
ScaleLevel maxScale = rasterMaxScale, ScaleLevel maxScale = rasterMaxScale,
ScaleStateCycle scaleStateCycle = defaultScaleStateCycle, ScaleStateCycle scaleStateCycle = defaultScaleStateCycle,
@ -387,7 +382,7 @@ class _EntryPageViewState extends State<EntryPageView> with SingleTickerProvider
final isWallpaperMode = context.read<ValueNotifier<AppMode>>().value == AppMode.setWallpaper; final isWallpaperMode = context.read<ValueNotifier<AppMode>>().value == AppMode.setWallpaper;
final minScale = isWallpaperMode ? const ScaleLevel(ref: ScaleReference.covered) : const ScaleLevel(ref: ScaleReference.contained); final minScale = isWallpaperMode ? const ScaleLevel(ref: ScaleReference.covered) : const ScaleLevel(ref: ScaleReference.contained);
return Magnifier( return AvesMagnifier(
// key includes modified date to refresh when the image is modified by metadata (e.g. rotated) // key includes modified date to refresh when the image is modified by metadata (e.g. rotated)
key: Key('${entry.uri}_${entry.pageId}_${entry.dateModifiedSecs}'), key: Key('${entry.uri}_${entry.pageId}_${entry.dateModifiedSecs}'),
controller: controller ?? _magnifierController, controller: controller ?? _magnifierController,

View file

@ -5,7 +5,6 @@ import 'package:aves/services/common/services.dart';
import 'package:aves/theme/durations.dart'; import 'package:aves/theme/durations.dart';
import 'package:aves/widgets/aves_app.dart'; import 'package:aves/widgets/aves_app.dart';
import 'package:aves/widgets/common/basic/insets.dart'; import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_level.dart';
import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves/widgets/common/providers/media_query_data_provider.dart';
import 'package:aves/widgets/viewer/controller.dart'; import 'package:aves/widgets/viewer/controller.dart';
import 'package:aves/widgets/viewer/entry_horizontal_pager.dart'; import 'package:aves/widgets/viewer/entry_horizontal_pager.dart';
@ -19,6 +18,7 @@ import 'package:aves/widgets/viewer/video/conductor.dart';
import 'package:aves/widgets/viewer/video/controller.dart'; import 'package:aves/widgets/viewer/video/controller.dart';
import 'package:aves/widgets/viewer/video_action_delegate.dart'; import 'package:aves/widgets/viewer/video_action_delegate.dart';
import 'package:aves/widgets/viewer/visual/controller_mixin.dart'; import 'package:aves/widgets/viewer/visual/controller_mixin.dart';
import 'package:aves_magnifier/aves_magnifier.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:screen_brightness/screen_brightness.dart'; import 'package:screen_brightness/screen_brightness.dart';

30
packages/aves_magnifier/.gitignore vendored Normal file
View file

@ -0,0 +1,30 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
migrate_working_dir/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
/pubspec.lock
**/doc/api/
.dart_tool/
.packages
build/

View file

@ -0,0 +1,10 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14
channel: master
project_type: package

View file

@ -0,0 +1 @@
include: ../../analysis_options.yaml

View file

@ -0,0 +1,10 @@
library aves_magnifier;
export 'src/controller/controller.dart';
export 'src/controller/state.dart';
export 'src/magnifier.dart';
export 'src/pan/gesture_detector_scope.dart';
export 'src/pan/scroll_physics.dart';
export 'src/scale/scale_boundaries.dart';
export 'src/scale/scale_level.dart';
export 'src/scale/state.dart';

View file

@ -1,13 +1,13 @@
import 'dart:async'; import 'dart:async';
import 'dart:ui'; import 'dart:ui';
import 'package:aves/widgets/common/magnifier/controller/state.dart'; import 'package:aves_magnifier/src/controller/state.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_boundaries.dart'; import 'package:aves_magnifier/src/scale/scale_boundaries.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_level.dart'; import 'package:aves_magnifier/src/scale/scale_level.dart';
import 'package:aves/widgets/common/magnifier/scale/state.dart'; import 'package:aves_magnifier/src/scale/state.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
class MagnifierController { class AvesMagnifierController {
final StreamController<MagnifierState> _stateStreamController = StreamController.broadcast(); final StreamController<MagnifierState> _stateStreamController = StreamController.broadcast();
final StreamController<ScaleBoundaries> _scaleBoundariesStreamController = StreamController.broadcast(); final StreamController<ScaleBoundaries> _scaleBoundariesStreamController = StreamController.broadcast();
final StreamController<ScaleStateChange> _scaleStateChangeStreamController = StreamController.broadcast(); final StreamController<ScaleStateChange> _scaleStateChangeStreamController = StreamController.broadcast();
@ -17,7 +17,7 @@ class MagnifierController {
ScaleBoundaries? _scaleBoundaries; ScaleBoundaries? _scaleBoundaries;
late ScaleStateChange _currentScaleState, previousScaleState; late ScaleStateChange _currentScaleState, previousScaleState;
MagnifierController({ AvesMagnifierController({
MagnifierState? initialState, MagnifierState? initialState,
}) : super() { }) : super() {
initial = initialState ?? initial = initialState ??

View file

@ -1,17 +1,17 @@
import 'dart:async'; import 'dart:async';
import 'package:aves/widgets/common/magnifier/controller/controller.dart'; import 'package:aves_magnifier/src/controller/controller.dart';
import 'package:aves/widgets/common/magnifier/controller/state.dart'; import 'package:aves_magnifier/src/controller/state.dart';
import 'package:aves/widgets/common/magnifier/core/core.dart'; import 'package:aves_magnifier/src/core/core.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_boundaries.dart'; import 'package:aves_magnifier/src/scale/scale_boundaries.dart';
import 'package:aves/widgets/common/magnifier/scale/state.dart'; import 'package:aves_magnifier/src/scale/state.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
/// A class to hold internal layout logic to sync both controller states /// A class to hold internal layout logic to sync both controller states
/// ///
/// It reacts to layout changes (eg: enter landscape or widget resize) and syncs the two controllers. /// It reacts to layout changes (eg: enter landscape or widget resize) and syncs the two controllers.
mixin MagnifierControllerDelegate on State<MagnifierCore> { mixin AvesMagnifierControllerDelegate on State<MagnifierCore> {
MagnifierController get controller => widget.controller; AvesMagnifierController get controller => widget.controller;
ScaleBoundaries get scaleBoundaries => controller.scaleBoundaries; ScaleBoundaries get scaleBoundaries => controller.scaleBoundaries;

View file

@ -1,20 +1,20 @@
import 'dart:math'; import 'dart:math';
import 'package:aves/widgets/common/magnifier/controller/controller.dart'; import 'package:aves_magnifier/src/controller/controller.dart';
import 'package:aves/widgets/common/magnifier/controller/controller_delegate.dart'; import 'package:aves_magnifier/src/controller/controller_delegate.dart';
import 'package:aves/widgets/common/magnifier/controller/state.dart'; import 'package:aves_magnifier/src/controller/state.dart';
import 'package:aves/widgets/common/magnifier/core/gesture_detector.dart'; import 'package:aves_magnifier/src/core/gesture_detector.dart';
import 'package:aves/widgets/common/magnifier/magnifier.dart'; import 'package:aves_magnifier/src/magnifier.dart';
import 'package:aves/widgets/common/magnifier/pan/corner_hit_detector.dart'; import 'package:aves_magnifier/src/pan/corner_hit_detector.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_boundaries.dart'; import 'package:aves_magnifier/src/scale/scale_boundaries.dart';
import 'package:aves/widgets/common/magnifier/scale/state.dart'; import 'package:aves_magnifier/src/scale/state.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
/// Internal widget in which controls all animations lifecycle, core responses /// Internal widget in which controls all animations lifecycle, core responses
/// to user gestures, updates to the controller state and mounts the entire Layout /// to user gestures, updates to the controller state and mounts the entire Layout
class MagnifierCore extends StatefulWidget { class MagnifierCore extends StatefulWidget {
final MagnifierController controller; final AvesMagnifierController controller;
final ScaleStateCycle scaleStateCycle; final ScaleStateCycle scaleStateCycle;
final bool applyScale; final bool applyScale;
final double panInertia; final double panInertia;
@ -37,7 +37,7 @@ class MagnifierCore extends StatefulWidget {
State<StatefulWidget> createState() => _MagnifierCoreState(); State<StatefulWidget> createState() => _MagnifierCoreState();
} }
class _MagnifierCoreState extends State<MagnifierCore> with TickerProviderStateMixin, MagnifierControllerDelegate, CornerHitDetector { class _MagnifierCoreState extends State<MagnifierCore> with TickerProviderStateMixin, AvesMagnifierControllerDelegate, CornerHitDetector {
Offset? _startFocalPoint, _lastViewportFocalPosition; Offset? _startFocalPoint, _lastViewportFocalPosition;
double? _startScale, _quickScaleLastY, _quickScaleLastDistance; double? _startScale, _quickScaleLastY, _quickScaleLastDistance;
late bool _doubleTap, _quickScaleMoved; late bool _doubleTap, _quickScaleMoved;

View file

@ -1,6 +1,6 @@
import 'package:aves/widgets/common/magnifier/core/scale_gesture_recognizer.dart'; import 'package:aves_magnifier/src/core/scale_gesture_recognizer.dart';
import 'package:aves/widgets/common/magnifier/pan/corner_hit_detector.dart'; import 'package:aves_magnifier/src/pan/corner_hit_detector.dart';
import 'package:aves/widgets/common/magnifier/pan/gesture_detector_scope.dart'; import 'package:aves_magnifier/src/pan/gesture_detector_scope.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';

View file

@ -1,6 +1,6 @@
import 'dart:math'; import 'dart:math';
import 'package:aves/widgets/common/magnifier/pan/corner_hit_detector.dart'; import 'package:aves_magnifier/src/pan/corner_hit_detector.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';

View file

@ -1,9 +1,9 @@
import 'package:aves/widgets/common/magnifier/controller/controller.dart'; import 'package:aves_magnifier/src/controller/controller.dart';
import 'package:aves/widgets/common/magnifier/controller/state.dart'; import 'package:aves_magnifier/src/controller/state.dart';
import 'package:aves/widgets/common/magnifier/core/core.dart'; import 'package:aves_magnifier/src/core/core.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_boundaries.dart'; import 'package:aves_magnifier/src/scale/scale_boundaries.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_level.dart'; import 'package:aves_magnifier/src/scale/scale_level.dart';
import 'package:aves/widgets/common/magnifier/scale/state.dart'; import 'package:aves_magnifier/src/scale/state.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
/* /*
@ -18,8 +18,8 @@ import 'package:flutter/material.dart';
- added single & double tap position feedback - added single & double tap position feedback
- fixed focus when scaling by double-tap/pinch - fixed focus when scaling by double-tap/pinch
*/ */
class Magnifier extends StatelessWidget { class AvesMagnifier extends StatelessWidget {
const Magnifier({ const AvesMagnifier({
super.key, super.key,
required this.controller, required this.controller,
required this.childSize, required this.childSize,
@ -34,7 +34,7 @@ class Magnifier extends StatelessWidget {
required this.child, required this.child,
}); });
final MagnifierController controller; final AvesMagnifierController controller;
// The size of the custom [child]. This value is used to compute the relation between the child and the container's size to calculate the scale value. // The size of the custom [child]. This value is used to compute the relation between the child and the container's size to calculate the scale value.
final Size childSize; final Size childSize;

View file

@ -1,8 +1,8 @@
import 'package:aves/widgets/common/magnifier/controller/controller_delegate.dart'; import 'package:aves_magnifier/src/controller/controller_delegate.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
mixin CornerHitDetector on MagnifierControllerDelegate { mixin CornerHitDetector on AvesMagnifierControllerDelegate {
// the child width/height is not accurate for some image size & scale combos // the child width/height is not accurate for some image size & scale combos
// e.g. 3580.0 * 0.1005586592178771 yields 360.0 // e.g. 3580.0 * 0.1005586592178771 yields 360.0
// but 4764.0 * 0.07556675062972293 yields 360.00000000000006 // but 4764.0 * 0.07556675062972293 yields 360.00000000000006

View file

@ -1,8 +1,8 @@
import 'dart:math'; import 'dart:math';
import 'dart:ui'; import 'dart:ui';
import 'package:aves/widgets/common/magnifier/controller/controller.dart'; import 'package:aves_magnifier/src/controller/controller.dart';
import 'package:aves/widgets/common/magnifier/scale/scale_level.dart'; import 'package:aves_magnifier/src/scale/scale_level.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
@ -78,11 +78,11 @@ class ScaleBoundaries extends Equatable {
Offset get _childCenter => childSize.center(Offset.zero); Offset get _childCenter => childSize.center(Offset.zero);
Offset viewportToStatePosition(MagnifierController controller, Offset viewportPosition) { Offset viewportToStatePosition(AvesMagnifierController controller, Offset viewportPosition) {
return viewportPosition - _viewportCenter - controller.position; return viewportPosition - _viewportCenter - controller.position;
} }
Offset viewportToChildPosition(MagnifierController controller, Offset viewportPosition) { Offset viewportToChildPosition(AvesMagnifierController controller, Offset viewportPosition) {
return viewportToStatePosition(controller, viewportPosition) / controller.scale! + _childCenter; return viewportToStatePosition(controller, viewportPosition) / controller.scale! + _childCenter;
} }

View file

@ -1,4 +1,4 @@
import 'package:aves/widgets/common/magnifier/controller/state.dart'; import 'package:aves_magnifier/src/controller/state.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';

View file

@ -0,0 +1,17 @@
name: aves_magnifier
version: 0.0.1
publish_to: none
environment:
sdk: ">=2.18.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
equatable:
provider:
dev_dependencies:
flutter_lints:
flutter:

View file

@ -14,7 +14,7 @@ packages:
name: _flutterfire_internals name: _flutterfire_internals
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.7" version: "1.0.8"
analyzer: analyzer:
dependency: transitive dependency: transitive
description: description:
@ -43,6 +43,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.9.0" version: "2.9.0"
aves_magnifier:
dependency: "direct main"
description:
path: "packages/aves_magnifier"
relative: true
source: path
version: "0.0.1"
aves_map: aves_map:
dependency: "direct main" dependency: "direct main"
description: description:
@ -126,14 +133,14 @@ packages:
name: cloud_firestore_platform_interface name: cloud_firestore_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.8.4" version: "5.8.5"
cloud_firestore_web: cloud_firestore_web:
dependency: transitive dependency: transitive
description: description:
name: cloud_firestore_web name: cloud_firestore_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.4" version: "3.0.5"
collection: collection:
dependency: "direct main" dependency: "direct main"
description: description:
@ -284,7 +291,7 @@ packages:
name: firebase_core name: firebase_core
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.1" version: "2.2.0"
firebase_core_platform_interface: firebase_core_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -305,14 +312,14 @@ packages:
name: firebase_crashlytics name: firebase_crashlytics
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.4" version: "3.0.5"
firebase_crashlytics_platform_interface: firebase_crashlytics_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: firebase_crashlytics_platform_interface name: firebase_crashlytics_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.3.5" version: "3.3.6"
flex_color_picker: flex_color_picker:
dependency: "direct main" dependency: "direct main"
description: description:

View file

@ -21,6 +21,8 @@ dependencies:
sdk: flutter sdk: flutter
flutter_localizations: flutter_localizations:
sdk: flutter sdk: flutter
aves_magnifier:
path: packages/aves_magnifier
aves_map: aves_map:
path: plugins/aves_map path: plugins/aves_map
aves_report: aves_report:

View file

@ -4,10 +4,19 @@ if [ ! -d "scripts" ]; then
fi fi
flutter pub get flutter pub get
cd packages || exit
for package in $(ls -d *); do
cd $package
flutter pub get
cd ..
done
cd ..
cd plugins || exit cd plugins || exit
for plugin in $(ls -d *); do for plugin in $(ls -d *); do
cd $plugin cd $plugin
flutter pub get flutter pub get
cd .. cd ..
done done
cd ..

View file

@ -4,10 +4,19 @@ if [ ! -d "scripts" ]; then
fi fi
flutter pub upgrade flutter pub upgrade
cd packages || exit
for package in $(ls -d *); do
cd $package
flutter pub upgrade
cd ..
done
cd ..
cd plugins || exit cd plugins || exit
for plugin in $(ls -d *); do for plugin in $(ls -d *); do
cd $plugin cd $plugin
flutter pub upgrade flutter pub upgrade
cd .. cd ..
done done
cd ..