flutter vNext prep
This commit is contained in:
parent
05d4d01ef7
commit
129b76e488
71 changed files with 98 additions and 98 deletions
|
@ -8,8 +8,8 @@ import 'package:aves/model/entry/extensions/props.dart';
|
|||
import 'package:aves/model/metadata/date_modifier.dart';
|
||||
import 'package:aves/ref/metadata/exif.dart';
|
||||
import 'package:aves/ref/metadata/iptc.dart';
|
||||
import 'package:aves/ref/mime_types.dart';
|
||||
import 'package:aves/ref/metadata/xmp.dart';
|
||||
import 'package:aves/ref/mime_types.dart';
|
||||
import 'package:aves/services/common/services.dart';
|
||||
import 'package:aves/services/metadata/xmp.dart';
|
||||
import 'package:aves/utils/time_utils.dart';
|
||||
|
|
|
@ -7,9 +7,9 @@ extension ExtraAccessibilityTimeout on AccessibilityTimeout {
|
|||
switch (this) {
|
||||
case AccessibilityTimeout.system:
|
||||
if (hasAction) {
|
||||
return Duration(milliseconds: await (AccessibilityService.getRecommendedTimeToTakeAction(Durations.opToastActionDisplay)));
|
||||
return Duration(milliseconds: await (AccessibilityService.getRecommendedTimeToTakeAction(ADurations.opToastActionDisplay)));
|
||||
} else {
|
||||
return Duration(milliseconds: await (AccessibilityService.getRecommendedTimeToRead(Durations.opToastTextDisplay)));
|
||||
return Duration(milliseconds: await (AccessibilityService.getRecommendedTimeToRead(ADurations.opToastTextDisplay)));
|
||||
}
|
||||
case AccessibilityTimeout.s1:
|
||||
return const Duration(seconds: 1);
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:aves/model/entry/entry.dart';
|
||||
import 'package:aves_utils/aves_utils.dart';
|
||||
import 'package:aves/services/common/services.dart';
|
||||
import 'package:aves_utils/aves_utils.dart';
|
||||
import 'package:aves_video/aves_video.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
|
||||
class Durations {
|
||||
class ADurations {
|
||||
// Flutter animations (with margin)
|
||||
static const popupMenuAnimation = Duration(milliseconds: 300 + 20); // ref `_kMenuDuration` used in `_PopupMenuRoute`
|
||||
// page transition duration also available via `ModalRoute.of(context)!.transitionDuration * timeDilation`
|
||||
|
|
|
@ -156,7 +156,7 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
|
|||
late final Future<CorePalette?> _dynamicColorPaletteLoader;
|
||||
final TvRailController _tvRailController = TvRailController();
|
||||
final CollectionSource _mediaStoreSource = MediaStoreSource();
|
||||
final Debouncer _mediaStoreChangeDebouncer = Debouncer(delay: Durations.mediaContentChangeDebounceDelay);
|
||||
final Debouncer _mediaStoreChangeDebouncer = Debouncer(delay: ADurations.mediaContentChangeDebounceDelay);
|
||||
final Set<String> _changedUris = {};
|
||||
Size? _screenSize;
|
||||
|
||||
|
|
|
@ -433,7 +433,7 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
|
|||
},
|
||||
onSelected: (action) async {
|
||||
// wait for the popup menu to hide before proceeding with the action
|
||||
await Future.delayed(Durations.popupMenuAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.popupMenuAnimation * timeDilation);
|
||||
await _onActionSelected(action);
|
||||
},
|
||||
),
|
||||
|
@ -670,7 +670,7 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
|
|||
routeSettings: const RouteSettings(name: TileViewDialog.routeName),
|
||||
);
|
||||
// wait for the dialog to hide as applying the change may block the UI
|
||||
await Future.delayed(Durations.dialogTransitionAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.dialogTransitionAnimation * timeDilation);
|
||||
if (value != null && initialValue != value) {
|
||||
settings.collectionSortFactor = value.item1!;
|
||||
settings.collectionSectionFactor = value.item2!;
|
||||
|
|
|
@ -641,7 +641,7 @@ class _CollectionScrollViewState extends State<_CollectionScrollView> with Widge
|
|||
void _onScrollChanged() {
|
||||
widget.isScrollingNotifier.value = true;
|
||||
_stopScrollMonitoringTimer();
|
||||
_scrollMonitoringTimer = Timer(Durations.collectionScrollMonitoringTimerDelay, () {
|
||||
_scrollMonitoringTimer = Timer(ADurations.collectionScrollMonitoringTimerDelay, () {
|
||||
widget.isScrollingNotifier.value = false;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -222,7 +222,7 @@ class _CollectionPageState extends State<CollectionPage> {
|
|||
if (item == null) return;
|
||||
|
||||
final delayDuration = context.read<DurationsData>().staggeredAnimationPageTarget;
|
||||
await Future.delayed(delayDuration + Durations.highlightScrollInitDelay);
|
||||
await Future.delayed(delayDuration + ADurations.highlightScrollInitDelay);
|
||||
|
||||
if (!mounted) return;
|
||||
final animate = context.read<Settings>().accessibilityAnimations.animate;
|
||||
|
|
|
@ -487,7 +487,7 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware
|
|||
if (confirmed == null || !confirmed) return null;
|
||||
|
||||
// wait for the dialog to hide as applying the change may block the UI
|
||||
await Future.delayed(Durations.dialogTransitionAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.dialogTransitionAnimation * timeDilation);
|
||||
return supported;
|
||||
}
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ class _FilterBarState extends State<FilterBar> {
|
|||
);
|
||||
}
|
||||
: (context, animation) => const SizedBox(),
|
||||
duration: animate ? Durations.filterBarRemovalAnimation : Duration.zero,
|
||||
duration: animate ? ADurations.filterBarRemovalAnimation : Duration.zero,
|
||||
);
|
||||
});
|
||||
added.forEach((filter) {
|
||||
|
|
|
@ -437,7 +437,7 @@ mixin EntryStorageMixin on FeedbackMixin, PermissionAwareMixin, SizeAwareMixin {
|
|||
));
|
||||
} else {
|
||||
// track in current page, without navigation
|
||||
await Future.delayed(Durations.highlightScrollInitDelay);
|
||||
await Future.delayed(ADurations.highlightScrollInitDelay);
|
||||
final targetEntry = collection.sortedEntries.firstWhereOrNull(highlightTest);
|
||||
if (targetEntry != null) {
|
||||
context.read<HighlightInfo>().trackItem(targetEntry, highlightItem: targetEntry);
|
||||
|
|
|
@ -171,7 +171,7 @@ class _ReportOverlayState<T> extends State<ReportOverlay<T>> with SingleTickerPr
|
|||
super.initState();
|
||||
|
||||
_animationController = AnimationController(
|
||||
duration: Durations.collectionOpOverlayAnimation,
|
||||
duration: ADurations.collectionOpOverlayAnimation,
|
||||
vsync: this,
|
||||
);
|
||||
_animation = CurvedAnimation(
|
||||
|
@ -395,7 +395,7 @@ class _ActionFeedbackState extends State<ActionFeedback> with SingleTickerProvid
|
|||
void initState() {
|
||||
super.initState();
|
||||
_animationController = AnimationController(
|
||||
duration: Durations.viewerActionFeedbackAnimation,
|
||||
duration: ADurations.viewerActionFeedbackAnimation,
|
||||
vsync: this,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ class SourceStateAwareAppBarTitle extends StatelessWidget {
|
|||
valueListenable: source.stateNotifier,
|
||||
builder: (context, sourceState, child) {
|
||||
return AnimatedSwitcher(
|
||||
duration: Durations.appBarTitleAnimation,
|
||||
duration: ADurations.appBarTitleAnimation,
|
||||
transitionBuilder: (child, animation) => FadeTransition(
|
||||
opacity: animation,
|
||||
child: SizeTransition(
|
||||
|
|
|
@ -30,7 +30,7 @@ class QueryBar extends StatefulWidget {
|
|||
}
|
||||
|
||||
class _QueryBarState extends State<QueryBar> {
|
||||
final Debouncer _debouncer = Debouncer(delay: Durations.searchDebounceDelay);
|
||||
final Debouncer _debouncer = Debouncer(delay: ADurations.searchDebounceDelay);
|
||||
late TextEditingController _controller;
|
||||
|
||||
ValueNotifier<String> get queryNotifier => widget.queryNotifier;
|
||||
|
@ -85,7 +85,7 @@ class _QueryBarState extends State<QueryBar> {
|
|||
child: ValueListenableBuilder<TextEditingValue>(
|
||||
valueListenable: _controller,
|
||||
builder: (context, value, child) => AnimatedSwitcher(
|
||||
duration: Durations.appBarActionChangeAnimation,
|
||||
duration: ADurations.appBarActionChangeAnimation,
|
||||
transitionBuilder: (child, animation) => FadeTransition(
|
||||
opacity: animation,
|
||||
child: SizeTransition(
|
||||
|
|
|
@ -18,10 +18,10 @@ class DoubleBackPopHandler {
|
|||
if (!Navigator.canPop(context) && settings.mustBackTwiceToExit && !_backOnce) {
|
||||
_backOnce = true;
|
||||
_stopBackTimer();
|
||||
_backTimer = Timer(Durations.doubleBackTimerDelay, () => _backOnce = false);
|
||||
_backTimer = Timer(ADurations.doubleBackTimerDelay, () => _backOnce = false);
|
||||
toast(
|
||||
context.l10n.doubleBackExitMessage,
|
||||
duration: Durations.doubleBackTimerDelay,
|
||||
duration: ADurations.doubleBackTimerDelay,
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -119,7 +119,7 @@ class ExpandableFilterRow extends StatelessWidget {
|
|||
Widget build(BuildContext context) {
|
||||
if (filters.isEmpty) return const SizedBox();
|
||||
return AnimatedSwitcher(
|
||||
duration: Durations.filterRowExpandAnimation,
|
||||
duration: ADurations.filterRowExpandAnimation,
|
||||
layoutBuilder: (currentChild, previousChildren) => Stack(
|
||||
children: [
|
||||
...previousChildren,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import 'dart:ui' as ui;
|
||||
import 'dart:math' as math;
|
||||
import 'dart:ui' as ui;
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ class _SweeperState extends State<Sweeper> with SingleTickerProviderStateMixin {
|
|||
void initState() {
|
||||
super.initState();
|
||||
_angleAnimationController = AnimationController(
|
||||
duration: Durations.sweepingAnimation,
|
||||
duration: ADurations.sweepingAnimation,
|
||||
vsync: this,
|
||||
);
|
||||
final startAngle = widget.startAngle;
|
||||
|
@ -85,7 +85,7 @@ class _SweeperState extends State<Sweeper> with SingleTickerProviderStateMixin {
|
|||
return IgnorePointer(
|
||||
child: AnimatedOpacity(
|
||||
opacity: isToggled && (_isAppearing || _angleAnimationController.status == AnimationStatus.forward) ? 1 : 0,
|
||||
duration: Durations.sweeperOpacityAnimation,
|
||||
duration: ADurations.sweeperOpacityAnimation,
|
||||
child: ValueListenableBuilder<double>(
|
||||
valueListenable: _angleAnimationController,
|
||||
builder: (context, value, child) {
|
||||
|
@ -112,7 +112,7 @@ class _SweeperState extends State<Sweeper> with SingleTickerProviderStateMixin {
|
|||
if (isToggled) {
|
||||
_isAppearing = true;
|
||||
setState(() {});
|
||||
await Future.delayed(Durations.sweeperOpacityAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.sweeperOpacityAnimation * timeDilation);
|
||||
_isAppearing = false;
|
||||
if (mounted) {
|
||||
_angleAnimationController.reset();
|
||||
|
|
|
@ -182,7 +182,7 @@ class _SectionSelectableLeading<T> extends StatelessWidget {
|
|||
descendantsAreFocusable: false,
|
||||
descendantsAreTraversable: false,
|
||||
child: AnimatedSwitcher(
|
||||
duration: Durations.sectionHeaderAnimation,
|
||||
duration: ADurations.sectionHeaderAnimation,
|
||||
switchInCurve: Curves.easeInOut,
|
||||
switchOutCurve: Curves.easeInOut,
|
||||
transitionBuilder: (child, animation) {
|
||||
|
@ -225,7 +225,7 @@ class _SectionSelectingLeading<T> extends StatelessWidget {
|
|||
final selection = context.watch<Selection<T>>();
|
||||
final isSelected = selection.isSelected(sectionEntries);
|
||||
return AnimatedSwitcher(
|
||||
duration: Durations.sectionHeaderAnimation,
|
||||
duration: ADurations.sectionHeaderAnimation,
|
||||
switchInCurve: Curves.easeOutBack,
|
||||
switchOutCurve: Curves.easeOutBack,
|
||||
transitionBuilder: (child, animation) => ScaleTransition(
|
||||
|
|
|
@ -115,12 +115,12 @@ class _GridItemTrackerState<T> extends State<GridItemTracker<T>> with WidgetsBin
|
|||
if (event.animate) {
|
||||
await scrollController.animateTo(
|
||||
scrollOffset,
|
||||
duration: Duration(milliseconds: (scrollOffset / 2).round().clamp(Durations.highlightScrollAnimationMinMillis, Durations.highlightScrollAnimationMaxMillis)),
|
||||
duration: Duration(milliseconds: (scrollOffset / 2).round().clamp(ADurations.highlightScrollAnimationMinMillis, ADurations.highlightScrollAnimationMaxMillis)),
|
||||
curve: Curves.easeInOutCubic,
|
||||
);
|
||||
} else {
|
||||
scrollController.jumpTo(scrollOffset);
|
||||
await Future.delayed(Durations.highlightJumpDelay);
|
||||
await Future.delayed(ADurations.highlightJumpDelay);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ class GridItemSelectionOverlay<T> extends StatelessWidget {
|
|||
final BorderRadius? borderRadius;
|
||||
final EdgeInsets? padding;
|
||||
|
||||
static const duration = Durations.thumbnailOverlayAnimation;
|
||||
static const duration = ADurations.thumbnailOverlayAnimation;
|
||||
|
||||
const GridItemSelectionOverlay({
|
||||
super.key,
|
||||
|
|
|
@ -93,7 +93,7 @@ class _OverlayBackgroundState extends State<_OverlayBackground> {
|
|||
Widget build(BuildContext context) {
|
||||
return AnimatedContainer(
|
||||
decoration: _buildBackgroundDecoration(context),
|
||||
duration: Durations.scalingGridBackgroundAnimation,
|
||||
duration: ADurations.scalingGridBackgroundAnimation,
|
||||
child: widget.child,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ class MosaicGrid extends StatelessWidget {
|
|||
top: dy,
|
||||
width: itemWidth,
|
||||
height: itemHeight,
|
||||
duration: Durations.scalingGridPositionAnimation,
|
||||
duration: ADurations.scalingGridPositionAnimation,
|
||||
child: builder(i, targetExtent),
|
||||
),
|
||||
);
|
||||
|
|
|
@ -98,7 +98,7 @@ class _OverlayBackgroundState extends State<_OverlayBackground> {
|
|||
Widget build(BuildContext context) {
|
||||
return AnimatedContainer(
|
||||
decoration: _buildBackgroundDecoration(context),
|
||||
duration: Durations.scalingGridBackgroundAnimation,
|
||||
duration: ADurations.scalingGridBackgroundAnimation,
|
||||
child: widget.child,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -152,7 +152,7 @@ class AvesFilterChip extends StatefulWidget {
|
|||
);
|
||||
if (selectedAction != null) {
|
||||
// wait for the popup menu to hide before proceeding with the action
|
||||
await Future.delayed(Durations.popupMenuAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.popupMenuAnimation * timeDilation);
|
||||
actionDelegate.onActionSelected(context, filter, selectedAction);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ class OverlayCoordinateFilterChip extends StatefulWidget {
|
|||
}
|
||||
|
||||
class _OverlayCoordinateFilterChipState extends State<OverlayCoordinateFilterChip> {
|
||||
final Debouncer _debouncer = Debouncer(delay: Durations.mapInfoDebounceDelay);
|
||||
final Debouncer _debouncer = Debouncer(delay: ADurations.mapInfoDebounceDelay);
|
||||
final ValueNotifier<ZoomedBounds?> _idleBoundsNotifier = ValueNotifier(null);
|
||||
|
||||
@override
|
||||
|
|
|
@ -261,7 +261,7 @@ class _GeoMapState extends State<GeoMap> {
|
|||
return AnimatedSize(
|
||||
alignment: Alignment.topCenter,
|
||||
curve: Curves.easeInOutCubic,
|
||||
duration: Durations.mapStyleSwitchAnimation,
|
||||
duration: ADurations.mapStyleSwitchAnimation,
|
||||
child: ValueListenableBuilder<bool>(
|
||||
valueListenable: widget.isAnimatingNotifier,
|
||||
builder: (context, animating, child) {
|
||||
|
|
|
@ -62,7 +62,7 @@ class _EntryLeafletMapState<T> extends State<EntryLeafletMap<T>> with TickerProv
|
|||
final MapController _leafletMapController = MapController();
|
||||
final List<StreamSubscription> _subscriptions = [];
|
||||
Map<MarkerKey<T>, GeoEntry<T>> _geoEntryByMarkerKey = {};
|
||||
final Debouncer _debouncer = Debouncer(delay: Durations.mapIdleDebounceDelay);
|
||||
final Debouncer _debouncer = Debouncer(delay: ADurations.mapIdleDebounceDelay);
|
||||
|
||||
ValueNotifier<ZoomedBounds> get boundsNotifier => widget.boundsNotifier;
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ class SearchPage extends StatefulWidget {
|
|||
}
|
||||
|
||||
class _SearchPageState extends State<SearchPage> {
|
||||
final Debouncer _debouncer = Debouncer(delay: Durations.searchDebounceDelay);
|
||||
final Debouncer _debouncer = Debouncer(delay: ADurations.searchDebounceDelay);
|
||||
final FocusNode _searchFieldFocusNode = FocusNode();
|
||||
final DoubleBackPopHandler _doubleBackPopHandler = DoubleBackPopHandler();
|
||||
|
||||
|
@ -77,7 +77,7 @@ class _SearchPageState extends State<SearchPage> {
|
|||
return;
|
||||
}
|
||||
widget.animation.removeStatusListener(_onAnimationStatusChanged);
|
||||
Future.delayed(Durations.pageTransitionAnimation * timeDilation).then((_) {
|
||||
Future.delayed(ADurations.pageTransitionAnimation * timeDilation).then((_) {
|
||||
if (!mounted) return;
|
||||
_searchFieldFocusNode.requestFocus();
|
||||
});
|
||||
|
|
|
@ -83,7 +83,7 @@ class ThumbnailZoomOverlay extends StatelessWidget {
|
|||
});
|
||||
|
||||
static const alignment = AlignmentDirectional.bottomEnd;
|
||||
static const duration = Durations.thumbnailOverlayAnimation;
|
||||
static const duration = ADurations.thumbnailOverlayAnimation;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
|
|
@ -151,7 +151,7 @@ class _ThumbnailScrollerState extends State<ThumbnailScroller> {
|
|||
color: currentIndex == index ? Colors.transparent : Colors.black45,
|
||||
width: thumbnailExtent,
|
||||
height: thumbnailExtent,
|
||||
duration: Durations.thumbnailScrollerShadeAnimation,
|
||||
duration: ADurations.thumbnailScrollerShadeAnimation,
|
||||
);
|
||||
},
|
||||
),
|
||||
|
@ -172,7 +172,7 @@ class _ThumbnailScrollerState extends State<ThumbnailScroller> {
|
|||
_isAnimating = true;
|
||||
await _scrollController.animateTo(
|
||||
targetOffset,
|
||||
duration: Durations.thumbnailScrollerScrollAnimation,
|
||||
duration: ADurations.thumbnailScrollerScrollAnimation,
|
||||
curve: Curves.easeOutCubic,
|
||||
);
|
||||
_isAnimating = false;
|
||||
|
|
|
@ -65,7 +65,7 @@ class _AppDebugPageState extends State<AppDebugPage> {
|
|||
.toList(),
|
||||
onSelected: (action) async {
|
||||
// wait for the popup menu to hide before proceeding with the action
|
||||
await Future.delayed(Durations.popupMenuAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.popupMenuAnimation * timeDilation);
|
||||
unawaited(_onActionSelected(action));
|
||||
},
|
||||
),
|
||||
|
|
|
@ -103,7 +103,7 @@ class _RenameEntrySetPageState extends State<RenameEntrySetPage> {
|
|||
},
|
||||
onSelected: (key) async {
|
||||
// wait for the popup menu to hide before proceeding with the action
|
||||
await Future.delayed(Durations.popupMenuAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.popupMenuAnimation * timeDilation);
|
||||
_insertProcessor(key);
|
||||
},
|
||||
tooltip: l10n.renameEntrySetPageInsertTooltip,
|
||||
|
|
|
@ -204,7 +204,7 @@ class _TagEditorPageState extends State<TagEditorPage> {
|
|||
onLongPress: null,
|
||||
),
|
||||
crossFadeState: sortedTags.isEmpty ? CrossFadeState.showFirst : CrossFadeState.showSecond,
|
||||
duration: Durations.tagEditorTransition,
|
||||
duration: ADurations.tagEditorTransition,
|
||||
),
|
||||
),
|
||||
const Divider(height: 0),
|
||||
|
|
|
@ -133,7 +133,7 @@ class _CreateAlbumDialogState extends State<CreateAlbumDialog> {
|
|||
// when the field gets focus, we wait for the soft keyboard to appear
|
||||
// then scroll to the bottom to make sure the field is in view
|
||||
if (_nameFieldFocusNode.hasFocus) {
|
||||
await Future.delayed(Durations.softKeyboardDisplayDelay + const Duration(milliseconds: 500));
|
||||
await Future.delayed(ADurations.softKeyboardDisplayDelay + const Duration(milliseconds: 500));
|
||||
_scrollToBottom();
|
||||
}
|
||||
}
|
||||
|
@ -141,7 +141,7 @@ class _CreateAlbumDialogState extends State<CreateAlbumDialog> {
|
|||
void _scrollToBottom() {
|
||||
_scrollController.animateTo(
|
||||
_scrollController.position.maxScrollExtent,
|
||||
duration: Durations.dialogFieldReachAnimation,
|
||||
duration: ADurations.dialogFieldReachAnimation,
|
||||
curve: Curves.easeInOut,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -227,7 +227,7 @@ class _AlbumPickPageState extends State<_AlbumPickPage> {
|
|||
FocusManager.instance.primaryFocus?.unfocus();
|
||||
|
||||
// wait for the popup menu to hide before proceeding with the action
|
||||
await Future.delayed(Durations.popupMenuAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.popupMenuAnimation * timeDilation);
|
||||
onActionSelected(action);
|
||||
},
|
||||
),
|
||||
|
@ -243,7 +243,7 @@ class _AlbumPickPageState extends State<_AlbumPickPage> {
|
|||
if (directory == null) return;
|
||||
|
||||
// wait for the dialog to hide as applying the change may block the UI
|
||||
await Future.delayed(Durations.dialogTransitionAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.dialogTransitionAnimation * timeDilation);
|
||||
|
||||
_pickAlbum(directory);
|
||||
}
|
||||
|
@ -265,7 +265,7 @@ class _AlbumPickPageState extends State<_AlbumPickPage> {
|
|||
if (details == null) return;
|
||||
|
||||
// wait for the dialog to hide as applying the change may block the UI
|
||||
await Future.delayed(Durations.dialogTransitionAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.dialogTransitionAnimation * timeDilation);
|
||||
|
||||
await vaults.create(details);
|
||||
_pickAlbum(details.path);
|
||||
|
|
|
@ -68,7 +68,7 @@ class _ContentState extends State<_Content> with SingleTickerProviderStateMixin
|
|||
final AvesMapController _mapController = AvesMapController();
|
||||
late final ValueNotifier<bool> _isPageAnimatingNotifier;
|
||||
final ValueNotifier<LatLng?> _dotLocationNotifier = ValueNotifier(null), _infoLocationNotifier = ValueNotifier(null);
|
||||
final Debouncer _infoDebouncer = Debouncer(delay: Durations.mapInfoDebounceDelay);
|
||||
final Debouncer _infoDebouncer = Debouncer(delay: ADurations.mapInfoDebounceDelay);
|
||||
|
||||
CollectionLens? get openingCollection => widget.collection;
|
||||
|
||||
|
@ -78,7 +78,7 @@ class _ContentState extends State<_Content> with SingleTickerProviderStateMixin
|
|||
|
||||
if (ExtraEntryMapStyle.isHeavy(settings.mapStyle)) {
|
||||
_isPageAnimatingNotifier = ValueNotifier(true);
|
||||
Future.delayed(Durations.pageTransitionAnimation * timeDilation).then((_) {
|
||||
Future.delayed(ADurations.pageTransitionAnimation * timeDilation).then((_) {
|
||||
if (!mounted) return;
|
||||
_isPageAnimatingNotifier.value = false;
|
||||
});
|
||||
|
|
|
@ -14,7 +14,7 @@ Future<void> showSelectionDialog<T>({
|
|||
routeSettings: const RouteSettings(name: AvesSingleSelectionDialog.routeName),
|
||||
);
|
||||
// wait for the dialog to hide as applying the change may block the UI
|
||||
await Future.delayed(Durations.dialogTransitionAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.dialogTransitionAnimation * timeDilation);
|
||||
if (value != null) {
|
||||
onSelection(value);
|
||||
}
|
||||
|
|
|
@ -190,7 +190,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate<AlbumFilter> with
|
|||
routeSettings: const RouteSettings(name: TileViewDialog.routeName),
|
||||
);
|
||||
// wait for the dialog to hide as applying the change may block the UI
|
||||
await Future.delayed(Durations.dialogTransitionAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.dialogTransitionAnimation * timeDilation);
|
||||
if (value != null && initialValue != value) {
|
||||
sortFactor = value.item1!;
|
||||
settings.albumGroupFactor = value.item2!;
|
||||
|
|
|
@ -237,7 +237,7 @@ abstract class ChipSetActionDelegate<T extends CollectionFilter> with FeedbackMi
|
|||
routeSettings: const RouteSettings(name: TileViewDialog.routeName),
|
||||
);
|
||||
// wait for the dialog to hide as applying the change may block the UI
|
||||
await Future.delayed(Durations.dialogTransitionAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.dialogTransitionAnimation * timeDilation);
|
||||
if (value != null && initialValue != value) {
|
||||
sortFactor = value.item1!;
|
||||
tileLayout = value.item3!;
|
||||
|
|
|
@ -366,7 +366,7 @@ class _FilterGridAppBarState<T extends CollectionFilter, CSAD extends ChipSetAct
|
|||
FocusManager.instance.primaryFocus?.unfocus();
|
||||
|
||||
// wait for the popup menu to hide before proceeding with the action
|
||||
await Future.delayed(Durations.popupMenuAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.popupMenuAnimation * timeDilation);
|
||||
_onActionSelected(context, action, actionDelegate);
|
||||
},
|
||||
),
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import 'dart:math';
|
||||
|
||||
import 'package:aves/model/apps.dart';
|
||||
import 'package:aves/model/covers.dart';
|
||||
import 'package:aves/model/filters/album.dart';
|
||||
import 'package:aves/model/filters/filters.dart';
|
||||
|
@ -13,7 +14,6 @@ import 'package:aves/model/vaults/vaults.dart';
|
|||
import 'package:aves/theme/durations.dart';
|
||||
import 'package:aves/theme/icons.dart';
|
||||
import 'package:aves/theme/text.dart';
|
||||
import 'package:aves/model/apps.dart';
|
||||
import 'package:aves/utils/android_file_utils.dart';
|
||||
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
|
||||
|
@ -183,7 +183,7 @@ class CoveredFilterChip<T extends CollectionFilter> extends StatelessWidget {
|
|||
if (pinned)
|
||||
AnimatedPadding(
|
||||
padding: EdgeInsetsDirectional.only(end: padding),
|
||||
duration: Durations.chipDecorationAnimation,
|
||||
duration: ADurations.chipDecorationAnimation,
|
||||
child: Icon(
|
||||
AIcons.pin,
|
||||
color: _detailColor(context),
|
||||
|
@ -193,7 +193,7 @@ class CoveredFilterChip<T extends CollectionFilter> extends StatelessWidget {
|
|||
if (filter is AlbumFilter && androidFileUtils.isOnRemovableStorage(filter.album))
|
||||
AnimatedPadding(
|
||||
padding: EdgeInsetsDirectional.only(end: padding),
|
||||
duration: Durations.chipDecorationAnimation,
|
||||
duration: ADurations.chipDecorationAnimation,
|
||||
child: Icon(
|
||||
AIcons.removableStorage,
|
||||
color: _detailColor(context),
|
||||
|
@ -203,7 +203,7 @@ class CoveredFilterChip<T extends CollectionFilter> extends StatelessWidget {
|
|||
if (filter is AlbumFilter && vaults.isVault(filter.album))
|
||||
AnimatedPadding(
|
||||
padding: EdgeInsetsDirectional.only(end: padding),
|
||||
duration: Durations.chipDecorationAnimation,
|
||||
duration: ADurations.chipDecorationAnimation,
|
||||
child: Icon(
|
||||
AIcons.locked,
|
||||
color: _detailColor(context),
|
||||
|
|
|
@ -546,7 +546,7 @@ class _FilterSectionedContentState<T extends CollectionFilter> extends State<_Fi
|
|||
final item = visibleSections.values.expand((list) => list).firstWhereOrNull((gridItem) => gridItem.filter == filter);
|
||||
if (item == null) return;
|
||||
|
||||
await Future.delayed(Durations.highlightScrollInitDelay);
|
||||
await Future.delayed(ADurations.highlightScrollInitDelay);
|
||||
|
||||
final animate = context.read<Settings>().accessibilityAnimations.animate;
|
||||
highlightInfo.trackItem(item, animate: animate, highlightItem: filter);
|
||||
|
|
|
@ -115,7 +115,7 @@ class _ContentState extends State<_Content> with SingleTickerProviderStateMixin
|
|||
|
||||
if (ExtraEntryMapStyle.isHeavy(settings.mapStyle)) {
|
||||
_isPageAnimatingNotifier.value = true;
|
||||
Future.delayed(Durations.pageTransitionAnimation * timeDilation).then((_) {
|
||||
Future.delayed(ADurations.pageTransitionAnimation * timeDilation).then((_) {
|
||||
if (!mounted) return;
|
||||
_isPageAnimatingNotifier.value = false;
|
||||
});
|
||||
|
@ -139,7 +139,7 @@ class _ContentState extends State<_Content> with SingleTickerProviderStateMixin
|
|||
_subscriptions.add(openingCollection.source.eventBus.on<CatalogMetadataChangedEvent>().listen((e) => _updateRegionCollection()));
|
||||
|
||||
_selectedIndexNotifier.addListener(_onThumbnailIndexChanged);
|
||||
Future.delayed(Durations.pageTransitionAnimation * timeDilation + const Duration(seconds: 1), () {
|
||||
Future.delayed(ADurations.pageTransitionAnimation * timeDilation + const Duration(seconds: 1), () {
|
||||
final regionEntries = regionCollection?.sortedEntries ?? [];
|
||||
final initialEntry = widget.initialEntry ?? regionEntries.firstOrNull;
|
||||
if (initialEntry != null) {
|
||||
|
@ -475,7 +475,7 @@ class _ContentState extends State<_Content> with SingleTickerProviderStateMixin
|
|||
);
|
||||
if (selectedAction != null) {
|
||||
// wait for the popup menu to hide before proceeding with the action
|
||||
await Future.delayed(Durations.popupMenuAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.popupMenuAnimation * timeDilation);
|
||||
final delegate = EntrySetActionDelegate();
|
||||
switch (selectedAction) {
|
||||
case MapClusterAction.editLocation:
|
||||
|
|
|
@ -28,7 +28,7 @@ class MapEntryScroller extends StatefulWidget {
|
|||
|
||||
class _MapEntryScrollerState extends State<MapEntryScroller> {
|
||||
final ValueNotifier<AvesEntry?> _infoEntryNotifier = ValueNotifier(null);
|
||||
final Debouncer _infoDebouncer = Debouncer(delay: Durations.mapInfoDebounceDelay);
|
||||
final Debouncer _infoDebouncer = Debouncer(delay: ADurations.mapInfoDebounceDelay);
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
|
|
@ -111,7 +111,7 @@ class _AppDrawerState extends State<AppDrawer> {
|
|||
Widget _buildHeader(BuildContext context) {
|
||||
Future<void> goTo(String routeName, WidgetBuilder pageBuilder) async {
|
||||
Navigator.maybeOf(context)?.pop();
|
||||
await Future.delayed(Durations.drawerTransitionAnimation);
|
||||
await Future.delayed(ADurations.drawerTransitionAnimation);
|
||||
await Navigator.maybeOf(context)?.push(MaterialPageRoute(
|
||||
settings: RouteSettings(name: routeName),
|
||||
builder: pageBuilder,
|
||||
|
|
|
@ -29,7 +29,7 @@ class ActionPanel extends StatelessWidget {
|
|||
borderRadius: const BorderRadius.all(Radius.circular(8)),
|
||||
),
|
||||
margin: const EdgeInsets.all(16),
|
||||
duration: Durations.quickActionHighlightAnimation,
|
||||
duration: ADurations.quickActionHighlightAnimation,
|
||||
child: ClipRRect(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(8)),
|
||||
child: child,
|
||||
|
|
|
@ -111,7 +111,7 @@ class _QuickActionEditorBodyState<T extends Object> extends State<QuickActionEdi
|
|||
void _onQuickActionTargetLeave() {
|
||||
_stopLeavingTimer();
|
||||
final action = _draggedAvailableAction.value;
|
||||
_targetLeavingTimer = Timer(Durations.quickActionListAnimation + const Duration(milliseconds: 50), () {
|
||||
_targetLeavingTimer = Timer(ADurations.quickActionListAnimation + const Duration(milliseconds: 50), () {
|
||||
_removeQuickAction(action);
|
||||
_quickActionHighlight.value = false;
|
||||
});
|
||||
|
@ -329,10 +329,10 @@ class _QuickActionEditorBodyState<T extends Object> extends State<QuickActionEdi
|
|||
_quickActions.insert(targetIndex, action);
|
||||
_animatedListKey.currentState!.insertItem(
|
||||
targetIndex,
|
||||
duration: Durations.quickActionListAnimation,
|
||||
duration: ADurations.quickActionListAnimation,
|
||||
);
|
||||
_quickActionsChangeNotifier.notify();
|
||||
Future.delayed(Durations.quickActionListAnimation).then((value) => _reordering = false);
|
||||
Future.delayed(ADurations.quickActionListAnimation).then((value) => _reordering = false);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -344,7 +344,7 @@ class _QuickActionEditorBodyState<T extends Object> extends State<QuickActionEdi
|
|||
_animatedListKey.currentState!.removeItem(
|
||||
index,
|
||||
(context, animation) => DraggedPlaceholder(child: _buildQuickActionButton(action, animation)),
|
||||
duration: Durations.quickActionListAnimation,
|
||||
duration: ADurations.quickActionListAnimation,
|
||||
);
|
||||
_quickActionsChangeNotifier.notify();
|
||||
return true;
|
||||
|
|
|
@ -25,7 +25,7 @@ class SettingsTileLeading extends StatelessWidget {
|
|||
)),
|
||||
shape: BoxShape.circle,
|
||||
),
|
||||
duration: Durations.themeColorModeAnimation,
|
||||
duration: ADurations.themeColorModeAnimation,
|
||||
child: DecoratedIcon(
|
||||
icon,
|
||||
size: 18,
|
||||
|
|
|
@ -68,7 +68,7 @@ class SettingsSwitchListTile extends StatelessWidget {
|
|||
Expanded(child: titleWidget),
|
||||
AnimatedOpacity(
|
||||
opacity: current ? 1 : disabledOpacity,
|
||||
duration: Durations.toggleableTransitionAnimation,
|
||||
duration: ADurations.toggleableTransitionAnimation,
|
||||
child: trailing,
|
||||
),
|
||||
],
|
||||
|
|
|
@ -32,7 +32,7 @@ class LocaleTile extends StatelessWidget {
|
|||
),
|
||||
);
|
||||
// wait for the dialog to hide as applying the change may block the UI
|
||||
await Future.delayed(Durations.pageTransitionAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.pageTransitionAnimation * timeDilation);
|
||||
if (value != null) {
|
||||
settings.locale = value == systemLocaleOption ? null : value;
|
||||
}
|
||||
|
|
|
@ -83,7 +83,7 @@ class _FilePickerPageState extends State<FilePickerPage> {
|
|||
},
|
||||
onSelected: (action) async {
|
||||
// wait for the popup menu to hide before proceeding with the action
|
||||
await Future.delayed(Durations.popupMenuAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.popupMenuAnimation * timeDilation);
|
||||
switch (action) {
|
||||
case _PickerAction.toggleHiddenView:
|
||||
settings.filePickerShowHiddenFiles = !showHidden;
|
||||
|
@ -168,7 +168,7 @@ class _FilePickerPageState extends State<FilePickerPage> {
|
|||
title: Text(v.getDescription(context)),
|
||||
onTap: () async {
|
||||
Navigator.maybeOf(context)?.pop();
|
||||
await Future.delayed(Durations.drawerTransitionAnimation);
|
||||
await Future.delayed(ADurations.drawerTransitionAnimation);
|
||||
_goTo(v.path);
|
||||
setState(() {});
|
||||
},
|
||||
|
|
|
@ -155,7 +155,7 @@ class _HiddenPaths extends StatelessWidget {
|
|||
),
|
||||
);
|
||||
// wait for the dialog to hide as applying the change may block the UI
|
||||
await Future.delayed(Durations.pageTransitionAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.pageTransitionAnimation * timeDilation);
|
||||
if (path != null && path.isNotEmpty) {
|
||||
settings.changeFilterVisibility({PathFilter(path)}, false);
|
||||
}
|
||||
|
|
|
@ -71,7 +71,7 @@ class _SettingsMobilePageState extends State<SettingsMobilePage> with FeedbackMi
|
|||
},
|
||||
onSelected: (action) async {
|
||||
// wait for the popup menu to hide before proceeding with the action
|
||||
await Future.delayed(Durations.popupMenuAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.popupMenuAnimation * timeDilation);
|
||||
_onActionSelected(action);
|
||||
},
|
||||
),
|
||||
|
|
|
@ -68,7 +68,7 @@ class _StatsPageState extends State<StatsPage> with FeedbackMixin, VaultAwareMix
|
|||
super.initState();
|
||||
|
||||
_isPageAnimatingNotifier = ValueNotifier(true);
|
||||
Future.delayed(Durations.pageTransitionAnimation * timeDilation).then((_) {
|
||||
Future.delayed(ADurations.pageTransitionAnimation * timeDilation).then((_) {
|
||||
if (!mounted) return;
|
||||
_isPageAnimatingNotifier.value = false;
|
||||
});
|
||||
|
|
|
@ -401,7 +401,7 @@ class EntryActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAwareMix
|
|||
if (newName == null || newName.isEmpty || newName == targetEntry.filenameWithoutExtension) return;
|
||||
|
||||
// wait for the dialog to hide as applying the change may block the UI
|
||||
await Future.delayed(Durations.dialogTransitionAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.dialogTransitionAnimation * timeDilation);
|
||||
await rename(
|
||||
context,
|
||||
entriesToNewName: {targetEntry: '$newName${targetEntry.extension}'},
|
||||
|
|
|
@ -205,7 +205,7 @@ class VideoActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAwareMix
|
|||
await controller.play();
|
||||
}
|
||||
// hide overlay
|
||||
_overlayHidingTimer = Timer(context.read<DurationsData>().iconAnimation + Durations.videoOverlayHideDelay, () {
|
||||
_overlayHidingTimer = Timer(context.read<DurationsData>().iconAnimation + ADurations.videoOverlayHideDelay, () {
|
||||
const ToggleOverlayNotification(visible: false).dispatch(context);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -100,7 +100,7 @@ class ViewerController {
|
|||
),
|
||||
));
|
||||
_autopilotAnimationControllers[vsync] = animationController;
|
||||
Future.delayed(Durations.viewerHorizontalPageAnimation).then((_) => _autopilotAnimationControllers[vsync]?.forward());
|
||||
Future.delayed(ADurations.viewerHorizontalPageAnimation).then((_) => _autopilotAnimationControllers[vsync]?.forward());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -309,7 +309,7 @@ class _ViewerVerticalPageViewState extends State<ViewerVerticalPageView> {
|
|||
if (animate) {
|
||||
pageController.animateToPage(
|
||||
target,
|
||||
duration: Durations.viewerHorizontalPageAnimation,
|
||||
duration: ADurations.viewerHorizontalPageAnimation,
|
||||
curve: Curves.easeInOutCubic,
|
||||
);
|
||||
} else {
|
||||
|
@ -333,7 +333,7 @@ class _ViewerVerticalPageViewState extends State<ViewerVerticalPageView> {
|
|||
|
||||
_isVerticallyScrollingNotifier.value = true;
|
||||
_stopScrollMonitoringTimer();
|
||||
_verticalScrollMonitoringTimer = Timer(Durations.infoScrollMonitoringTimerDelay, () {
|
||||
_verticalScrollMonitoringTimer = Timer(ADurations.infoScrollMonitoringTimerDelay, () {
|
||||
_isVerticallyScrollingNotifier.value = false;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ class InfoAppBar extends StatelessWidget {
|
|||
],
|
||||
onSelected: (action) async {
|
||||
// wait for the popup menu to hide before proceeding with the action
|
||||
await Future.delayed(Durations.popupMenuAnimation * timeDilation);
|
||||
await Future.delayed(ADurations.popupMenuAnimation * timeDilation);
|
||||
actionDelegate.onActionSelected(context, entry, collection, action);
|
||||
},
|
||||
),
|
||||
|
|
|
@ -122,7 +122,7 @@ class _InfoPageState extends State<InfoPage> {
|
|||
ShowImageNotification().dispatch(context);
|
||||
_scrollController.animateTo(
|
||||
0,
|
||||
duration: Durations.pageTransitionAnimation,
|
||||
duration: ADurations.pageTransitionAnimation,
|
||||
curve: Curves.easeInOut,
|
||||
);
|
||||
}
|
||||
|
@ -271,7 +271,7 @@ class _InfoPageContentState extends State<_InfoPageContent> {
|
|||
}
|
||||
|
||||
void _onActionDelegateEvent(ActionEvent<EntryAction> event) {
|
||||
Future.delayed(Durations.dialogTransitionAnimation).then((_) {
|
||||
Future.delayed(ADurations.dialogTransitionAnimation).then((_) {
|
||||
if (event is ActionStartedEvent) {
|
||||
_isEditingMetadataNotifier.value = event.action;
|
||||
} else if (event is ActionEndedEvent) {
|
||||
|
|
|
@ -116,7 +116,7 @@ class _XmpCardState extends State<XmpCard> {
|
|||
),
|
||||
),
|
||||
MultiCrossFader(
|
||||
duration: Durations.xmpStructArrayCardTransition,
|
||||
duration: ADurations.xmpStructArrayCardTransition,
|
||||
sizeCurve: Curves.easeOutBack,
|
||||
alignment: AlignmentDirectional.topStart,
|
||||
child: Padding(
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import 'package:aves/ref/mime_types.dart';
|
||||
import 'package:aves/ref/metadata/xmp.dart';
|
||||
import 'package:aves/ref/mime_types.dart';
|
||||
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||
import 'package:aves/widgets/viewer/info/common.dart';
|
||||
import 'package:aves/widgets/viewer/info/embedded/notifications.dart';
|
||||
|
|
|
@ -14,7 +14,7 @@ class SelectionButton extends StatelessWidget {
|
|||
final Animation<double> scale;
|
||||
|
||||
static const double padding = 8;
|
||||
static const duration = Durations.thumbnailOverlayAnimation;
|
||||
static const duration = ADurations.thumbnailOverlayAnimation;
|
||||
|
||||
const SelectionButton({
|
||||
super.key,
|
||||
|
|
|
@ -25,7 +25,7 @@ class ViewerThumbnailPreview extends StatefulWidget {
|
|||
|
||||
class _ViewerThumbnailPreviewState extends State<ViewerThumbnailPreview> {
|
||||
final ValueNotifier<int> _entryIndexNotifier = ValueNotifier(0);
|
||||
final Debouncer _debouncer = Debouncer(delay: Durations.viewerThumbnailScrollDebounceDelay);
|
||||
final Debouncer _debouncer = Debouncer(delay: ADurations.viewerThumbnailScrollDebounceDelay);
|
||||
|
||||
List<AvesEntry> get entries => widget.entries;
|
||||
|
||||
|
|
|
@ -282,7 +282,7 @@ class ViewerButtonRowContent extends StatelessWidget {
|
|||
onSelected: (action) {
|
||||
_popupExpandedNotifier.value = null;
|
||||
// wait for the popup menu to hide before proceeding with the action
|
||||
Future.delayed(Durations.popupMenuAnimation * timeDilation, () => actionDelegate.onActionSelected(context, action));
|
||||
Future.delayed(ADurations.popupMenuAnimation * timeDilation, () => actionDelegate.onActionSelected(context, action));
|
||||
},
|
||||
onCanceled: () {
|
||||
_popupExpandedNotifier.value = null;
|
||||
|
|
|
@ -5,7 +5,6 @@ import 'dart:ui' as ui;
|
|||
import 'package:aves/model/entry/entry.dart';
|
||||
import 'package:aves/model/entry/extensions/images.dart';
|
||||
import 'package:aves/model/entry/extensions/props.dart';
|
||||
import 'package:aves_model/aves_model.dart';
|
||||
import 'package:aves/services/wallpaper_service.dart';
|
||||
import 'package:aves/widgets/common/action_mixins/feedback.dart';
|
||||
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||
|
@ -14,6 +13,7 @@ import 'package:aves/widgets/dialogs/wallpaper_settings_dialog.dart';
|
|||
import 'package:aves/widgets/viewer/overlay/viewer_buttons.dart';
|
||||
import 'package:aves/widgets/viewer/video/conductor.dart';
|
||||
import 'package:aves/widgets/viewer/view/conductor.dart';
|
||||
import 'package:aves_model/aves_model.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
|
|
|
@ -174,7 +174,7 @@ mixin EntryViewControllerMixin<T extends StatefulWidget> on State<T> {
|
|||
await _onPageChanged();
|
||||
|
||||
if (entry.isMotionPhoto && shouldAutoPlayMotionPhoto) {
|
||||
await Future.delayed(Durations.motionPhotoAutoPlayDelay);
|
||||
await Future.delayed(ADurations.motionPhotoAutoPlayDelay);
|
||||
if (entry == entryNotifier.value) {
|
||||
multiPageController.page = 1;
|
||||
}
|
||||
|
|
|
@ -5,10 +5,10 @@ import 'package:aves/model/entry/entry.dart';
|
|||
import 'package:aves/model/entry/extensions/images.dart';
|
||||
import 'package:aves/model/settings/enums/entry_background.dart';
|
||||
import 'package:aves/model/settings/settings.dart';
|
||||
import 'package:aves/model/view_state.dart';
|
||||
import 'package:aves/utils/math_utils.dart';
|
||||
import 'package:aves/widgets/common/fx/checkered_decoration.dart';
|
||||
import 'package:aves/widgets/viewer/visual/entry_page_view.dart';
|
||||
import 'package:aves/model/view_state.dart';
|
||||
import 'package:aves_model/aves_model.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
|
@ -3,8 +3,8 @@ import 'package:aves/model/entry/extensions/images.dart';
|
|||
import 'package:aves/model/entry/extensions/multipage.dart';
|
||||
import 'package:aves/theme/durations.dart';
|
||||
import 'package:aves/widgets/common/thumbnail/image.dart';
|
||||
import 'package:aves_video/aves_video.dart';
|
||||
import 'package:aves_magnifier/aves_magnifier.dart';
|
||||
import 'package:aves_video/aves_video.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
|
@ -106,7 +106,7 @@ class _VideoCoverState extends State<VideoCover> {
|
|||
child: AnimatedOpacity(
|
||||
opacity: showCover ? 1 : 0,
|
||||
curve: Curves.easeInCirc,
|
||||
duration: Durations.viewerVideoPlayerTransition,
|
||||
duration: ADurations.viewerVideoPlayerTransition,
|
||||
onEnd: () {
|
||||
// while cover is fading out, the same controller is used for both the cover and the video,
|
||||
// and both fire scale boundaries events, so we make sure that in the end
|
||||
|
|
Loading…
Reference in a new issue