diff --git a/app/lib/components/selection_menu.dart b/app/lib/components/selection_menu.dart index 308e484..39aaddf 100644 --- a/app/lib/components/selection_menu.dart +++ b/app/lib/components/selection_menu.dart @@ -31,8 +31,8 @@ class SelectionMenuAction extends StatelessWidget { height: 60, width: 60, decoration: BoxDecoration( - color: context.colorScheme.surface, - borderRadius: BorderRadius.circular(8), + color: context.colorScheme.containerLowOnSurface, + borderRadius: BorderRadius.circular(12), border: Border.all(color: context.colorScheme.outline), ), child: icon, @@ -40,7 +40,7 @@ class SelectionMenuAction extends StatelessWidget { const SizedBox(height: 8), Text( title, - style: AppTextStyles.body.copyWith( + style: AppTextStyles.body2.copyWith( color: context.colorScheme.textPrimary, ), textAlign: TextAlign.center, @@ -77,7 +77,7 @@ class SelectionMenu extends StatelessWidget { padding: const EdgeInsets.only(bottom: 16, top: 24), width: double.infinity, decoration: BoxDecoration( - color: context.colorScheme.containerLowOnSurface, + color: context.colorScheme.surface, border: Border( top: BorderSide( width: 1, diff --git a/app/lib/ui/flow/albums/media_list/album_media_list_screen.dart b/app/lib/ui/flow/albums/media_list/album_media_list_screen.dart index a409b49..08c3e47 100644 --- a/app/lib/ui/flow/albums/media_list/album_media_list_screen.dart +++ b/app/lib/ui/flow/albums/media_list/album_media_list_screen.dart @@ -15,6 +15,7 @@ import '../../../../components/app_sheet.dart'; import '../../../../components/error_screen.dart'; import '../../../../components/place_holder_screen.dart'; import '../../../../components/selection_menu.dart'; +import '../../../../components/snack_bar.dart'; import '../../../../domain/extensions/context_extensions.dart'; import '../../../../domain/extensions/widget_extensions.dart'; import '../../../../gen/assets.gen.dart'; @@ -43,8 +44,32 @@ class _AlbumMediaListScreenState extends ConsumerState { super.initState(); } + void _errorObserver() { + ref.listen( + _provider.select((value) => value.actionError), + (previous, next) { + if (next != null) { + showErrorSnackBar(context: context, error: next); + } + }, + ); + } + + void _deleteObserver() { + ref.listen( + _provider.select((value) => value.deleteAlbumSuccess), + (previous, next) { + if (next) { + context.pop(); + } + }, + ); + } + @override Widget build(BuildContext context) { + _errorObserver(); + _deleteObserver(); final state = ref.watch(_provider); return AppPage( title: state.album.name, diff --git a/app/lib/ui/flow/home/components/multi_selection_done_button.dart b/app/lib/ui/flow/home/components/home_selection_menu.dart similarity index 96% rename from app/lib/ui/flow/home/components/multi_selection_done_button.dart rename to app/lib/ui/flow/home/components/home_selection_menu.dart index 6123a4c..9d6356d 100644 --- a/app/lib/ui/flow/home/components/multi_selection_done_button.dart +++ b/app/lib/ui/flow/home/components/home_selection_menu.dart @@ -97,7 +97,7 @@ class HomeSelectionMenu extends ConsumerWidget { padding: const EdgeInsets.only(bottom: 0, right: 8), child: Icon( CupertinoIcons.cloud_upload, - color: context.colorScheme.textSecondary, + color: context.colorScheme.textPrimary, size: 22, ), ), @@ -143,7 +143,7 @@ class HomeSelectionMenu extends ConsumerWidget { padding: const EdgeInsets.only(bottom: 0, right: 8), child: Icon( CupertinoIcons.cloud_download, - color: context.colorScheme.textSecondary, + color: context.colorScheme.textPrimary, size: 22, ), ), @@ -194,7 +194,7 @@ class HomeSelectionMenu extends ConsumerWidget { padding: const EdgeInsets.only(bottom: 2, right: 2), child: Icon( CupertinoIcons.trash, - color: context.colorScheme.textSecondary, + color: context.colorScheme.alert, size: 22, ), ), @@ -243,7 +243,7 @@ class HomeSelectionMenu extends ConsumerWidget { padding: const EdgeInsets.only(bottom: 0, right: 8), child: Icon( CupertinoIcons.cloud_upload, - color: context.colorScheme.textSecondary, + color: context.colorScheme.textPrimary, size: 22, ), ), @@ -289,7 +289,7 @@ class HomeSelectionMenu extends ConsumerWidget { padding: const EdgeInsets.only(bottom: 0, right: 8), child: Icon( CupertinoIcons.cloud_download, - color: context.colorScheme.textSecondary, + color: context.colorScheme.textPrimary, size: 22, ), ), @@ -335,7 +335,7 @@ class HomeSelectionMenu extends ConsumerWidget { padding: const EdgeInsets.only(bottom: 2, right: 2), child: Icon( CupertinoIcons.trash, - color: context.colorScheme.textSecondary, + color: context.colorScheme.alert, size: 22, ), ), @@ -375,9 +375,10 @@ class HomeSelectionMenu extends ConsumerWidget { Widget _deleteFromDevice(BuildContext context, WidgetRef ref) { return SelectionMenuAction( - icon: const Icon( + icon: Icon( CupertinoIcons.delete, - size: 24, + size: 22, + color: context.colorScheme.alert, ), title: context.l10n.delete_from_device_title, onTap: () { @@ -414,8 +415,8 @@ class HomeSelectionMenu extends ConsumerWidget { return SelectionMenuAction( icon: Icon( Platform.isIOS ? CupertinoIcons.share : Icons.share_rounded, - color: context.colorScheme.textSecondary, - size: 24, + color: context.colorScheme.textPrimary, + size: 22, ), title: context.l10n.common_share, onTap: () { diff --git a/app/lib/ui/flow/home/home_screen.dart b/app/lib/ui/flow/home/home_screen.dart index 217d7ba..dea6ad3 100644 --- a/app/lib/ui/flow/home/home_screen.dart +++ b/app/lib/ui/flow/home/home_screen.dart @@ -8,6 +8,7 @@ import '../../../domain/extensions/widget_extensions.dart'; import '../../../domain/formatter/date_formatter.dart'; import '../../../domain/extensions/context_extensions.dart'; import '../../../gen/assets.gen.dart'; +import 'components/home_selection_menu.dart'; import 'components/no_internet_connection_hint.dart'; import 'components/no_local_medias_access_screen.dart'; import 'components/sign_in_hint.dart'; @@ -21,7 +22,6 @@ import 'package:style/text/app_text_style.dart'; import '../../../components/snack_bar.dart'; import '../../navigation/app_route.dart'; import 'components/app_media_item.dart'; -import 'components/multi_selection_done_button.dart'; import 'package:style/buttons/action_button.dart'; import 'package:style/animations/fade_in_switcher.dart'; @@ -153,20 +153,24 @@ class _HomeScreenState extends ConsumerState { final gridEntry = state.medias.entries.elementAt(index - 1); return Column( children: [ - Container( - height: 45, - padding: const EdgeInsets.only(left: 16, top: 5), - margin: EdgeInsets.zero, - alignment: Alignment.centerLeft, - decoration: BoxDecoration( - color: context.colorScheme.surface, - ), - child: Text( - gridEntry.key.format(context, DateFormatType.relative), - style: AppTextStyles.subtitle1.copyWith( - color: context.colorScheme.textPrimary, - ), - ), + Builder( + builder: (context) { + return Container( + height: 45, + padding: const EdgeInsets.only(left: 16, top: 5), + margin: EdgeInsets.zero, + alignment: Alignment.centerLeft, + decoration: BoxDecoration( + color: context.colorScheme.surface, + ), + child: Text( + gridEntry.key.format(context, DateFormatType.relative), + style: AppTextStyles.subtitle1.copyWith( + color: context.colorScheme.textPrimary, + ), + ), + ); + }, ), GridView.builder( padding: const EdgeInsets.all(4), diff --git a/app/lib/ui/flow/media_preview/components/top_bar.dart b/app/lib/ui/flow/media_preview/components/top_bar.dart index 97c29fa..5f4f7d4 100644 --- a/app/lib/ui/flow/media_preview/components/top_bar.dart +++ b/app/lib/ui/flow/media_preview/components/top_bar.dart @@ -1,5 +1,7 @@ import 'dart:io'; +import 'dart:ui'; import 'package:flutter_svg/svg.dart'; +import 'package:style/theme/theme.dart'; import '../../../../domain/extensions/context_extensions.dart'; import '../../../../gen/assets.gen.dart'; import '../../../navigation/app_route.dart'; @@ -13,7 +15,6 @@ import 'package:style/buttons/action_button.dart'; import 'package:style/extensions/context_extensions.dart'; import 'package:style/text/app_text_style.dart'; import '../../../../components/app_dialog.dart'; -import '../../../../components/app_page.dart'; import '../../../../domain/formatter/date_formatter.dart'; import '../media_preview_view_model.dart'; import 'package:share_plus/share_plus.dart'; @@ -58,70 +59,118 @@ class _PreviewTopBarState extends ConsumerState { return CrossFadeAnimation( showChild: state.showAction, - child: AdaptiveAppBar( - iosTransitionBetweenRoutes: false, - text: - media?.createdTime?.format(context, DateFormatType.relative) ?? '', - actions: media == null - ? null - : [ - ActionButton( - onPressed: () { - showMenu( - context: context, - position: RelativeRect.fromSize( - Rect.fromLTRB(context.mediaQuerySize.width, 50, 0, 0), - context.mediaQuerySize, // Size of the screen - ), - elevation: 1, - surfaceTintColor: context.colorScheme.surface, - color: context.colorScheme.surface, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ), - items: [ - infoAction(context, media), - if (!media.sources - .contains(AppMediaSource.googleDrive) && - media.sources.contains(AppMediaSource.local) && - state.googleAccount != null) - _uploadToGoogleDriveAction(context, media), - if (media.sources - .contains(AppMediaSource.googleDrive) && - !media.sources.contains(AppMediaSource.local) && - state.googleAccount != null) - _downloadFromGoogleDriveAction(context, media), - if (media.sources - .contains(AppMediaSource.googleDrive) && - state.googleAccount != null) - _deleteFromGoogleDriveAction(context, media), - if (!media.sources.contains(AppMediaSource.dropbox) && - media.sources.contains(AppMediaSource.local) && - state.dropboxAccount != null) - _uploadToDropboxAction(context, media), - if (media.sources.contains(AppMediaSource.dropbox) && - !media.sources.contains(AppMediaSource.local) && - state.dropboxAccount != null) - _downloadFromDropboxAction(context, media), - if (media.sources.contains(AppMediaSource.dropbox) && - state.dropboxAccount != null) - _deleteFromDropboxAction(context, media), - if (media.sources.contains(AppMediaSource.local)) - _deleteFromDeviceAction(context, media), - if (media.sources.contains(AppMediaSource.local)) - _shareAction(context, media), - ], - ); - }, - icon: Icon( - Icons.more_vert_rounded, - color: context.colorScheme.textSecondary, - size: 22, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + ClipRect( + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), + child: Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + appColorSchemeDark.surface.withValues(alpha: 0.8), + appColorSchemeDark.surface.withValues(alpha: 0.2), + ], + ), + ), + child: AppBar( + backgroundColor: Colors.transparent, + foregroundColor: appColorSchemeDark.textPrimary, + title: Text( + media?.createdTime + ?.format(context, DateFormatType.relative) ?? + '', ), + actions: media == null + ? null + : [ + ActionButton( + onPressed: () { + showMenu( + context: context, + position: RelativeRect.fromSize( + Rect.fromLTRB( + context.mediaQuerySize.width, + 50, + 0, + 0, + ), + context.mediaQuerySize, // Size of the screen + ), + elevation: 1, + surfaceTintColor: context.colorScheme.surface, + color: context.colorScheme.surface, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8), + ), + items: [ + infoAction(context, media), + if (!media.sources.contains( + AppMediaSource.googleDrive, + ) && + media.sources + .contains(AppMediaSource.local) && + state.googleAccount != null) + _uploadToGoogleDriveAction(context, media), + if (media.sources.contains( + AppMediaSource.googleDrive, + ) && + !media.sources + .contains(AppMediaSource.local) && + state.googleAccount != null) + _downloadFromGoogleDriveAction( + context, + media, + ), + if (media.sources.contains( + AppMediaSource.googleDrive, + ) && + state.googleAccount != null) + _deleteFromGoogleDriveAction( + context, + media, + ), + if (!media.sources + .contains(AppMediaSource.dropbox) && + media.sources + .contains(AppMediaSource.local) && + state.dropboxAccount != null) + _uploadToDropboxAction(context, media), + if (media.sources + .contains(AppMediaSource.dropbox) && + !media.sources + .contains(AppMediaSource.local) && + state.dropboxAccount != null) + _downloadFromDropboxAction(context, media), + if (media.sources + .contains(AppMediaSource.dropbox) && + state.dropboxAccount != null) + _deleteFromDropboxAction(context, media), + if (media.sources + .contains(AppMediaSource.local)) + _deleteFromDeviceAction(context, media), + if (media.sources + .contains(AppMediaSource.local)) + _shareAction(context, media), + ], + ); + }, + icon: Icon( + Icons.more_vert_rounded, + color: appColorSchemeDark.textPrimary, + size: 22, + ), + ), + ], ), - if (!Platform.isIOS && !Platform.isMacOS) - const SizedBox(width: 8), - ], + ), + ), + ), + ], ), ); } diff --git a/app/lib/ui/flow/media_preview/components/video_player_components/video_duration_slider.dart b/app/lib/ui/flow/media_preview/components/video_player_components/video_duration_slider.dart index bccb9b1..c6371e6 100644 --- a/app/lib/ui/flow/media_preview/components/video_player_components/video_duration_slider.dart +++ b/app/lib/ui/flow/media_preview/components/video_player_components/video_duration_slider.dart @@ -1,3 +1,5 @@ +import 'dart:ui'; +import 'package:style/theme/theme.dart'; import '../../../../../domain/formatter/duration_formatter.dart'; import 'package:flutter/material.dart'; import 'package:style/animations/cross_fade_animation.dart'; @@ -7,6 +9,8 @@ import 'package:style/text/app_text_style.dart'; class VideoDurationSlider extends StatelessWidget { final bool showSlider; final Duration duration; + final void Function(PointerDownEvent event) onPointerDownOnSlider; + final void Function(PointerUpEvent event) onPointerUpOnSlider; final void Function(Duration duration) onChanged; final void Function(Duration duration) onChangeEnd; final Duration position; @@ -18,6 +22,8 @@ class VideoDurationSlider extends StatelessWidget { required this.position, required this.onChangeEnd, required this.onChanged, + required this.onPointerDownOnSlider, + required this.onPointerUpOnSlider, }); @override @@ -26,56 +32,72 @@ class VideoDurationSlider extends StatelessWidget { alignment: Alignment.bottomCenter, child: CrossFadeAnimation( showChild: showSlider, - child: Container( - padding: EdgeInsets.only( - bottom: context.systemPadding.bottom + 8, - top: 8, - left: 16, - right: 16, - ), - color: context.colorScheme.surface, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - position.format, - style: AppTextStyles.caption - .copyWith(color: context.colorScheme.textPrimary), + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), + child: Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + appColorSchemeDark.surface.withValues(alpha: 0.2), + appColorSchemeDark.surface.withValues(alpha: 0.8), + ], ), - Expanded( - child: SizedBox( - height: 30, - child: Material( - color: Colors.transparent, - child: SliderTheme( - data: SliderTheme.of(context).copyWith( - trackHeight: 4, - trackShape: const RoundedRectSliderTrackShape(), - rangeTrackShape: - const RoundedRectRangeSliderTrackShape(), - thumbShape: SliderComponentShape.noThumb, - ), - child: Slider( - value: position.inSeconds.toDouble(), - max: duration.inSeconds.toDouble(), - min: 0, - activeColor: context.colorScheme.primary, - inactiveColor: context.colorScheme.outline, - onChangeEnd: (value) => - onChangeEnd.call(Duration(seconds: value.toInt())), - onChanged: (double value) => - onChanged.call(Duration(seconds: value.toInt())), + ), + padding: EdgeInsets.only( + bottom: context.systemPadding.bottom + 8, + top: 8, + left: 16, + right: 16, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + position.format, + style: AppTextStyles.caption + .copyWith(color: appColorSchemeDark.textPrimary), + ), + Expanded( + child: SizedBox( + height: 30, + child: Material( + color: Colors.transparent, + child: Listener( + onPointerDown: onPointerDownOnSlider, + onPointerUp: onPointerUpOnSlider, + child: SliderTheme( + data: SliderTheme.of(context).copyWith( + trackHeight: 4, + trackShape: const RoundedRectSliderTrackShape(), + rangeTrackShape: + const RoundedRectRangeSliderTrackShape(), + thumbShape: SliderComponentShape.noThumb, + ), + child: Slider( + value: position.inSeconds.toDouble(), + max: duration.inSeconds.toDouble(), + min: 0, + activeColor: appColorSchemeDark.primary, + inactiveColor: appColorSchemeDark.outline, + onChangeEnd: (value) => onChangeEnd + .call(Duration(seconds: value.toInt())), + onChanged: (double value) => onChanged + .call(Duration(seconds: value.toInt())), + ), + ), ), ), ), ), - ), - Text( - duration.format, - style: AppTextStyles.caption - .copyWith(color: context.colorScheme.textPrimary), - ), - ], + Text( + duration.format, + style: AppTextStyles.caption + .copyWith(color: appColorSchemeDark.textPrimary), + ), + ], + ), ), ), ), diff --git a/app/lib/ui/flow/media_preview/media_preview_screen.dart b/app/lib/ui/flow/media_preview/media_preview_screen.dart index 4ef708a..c7c634a 100644 --- a/app/lib/ui/flow/media_preview/media_preview_screen.dart +++ b/app/lib/ui/flow/media_preview/media_preview_screen.dart @@ -4,6 +4,7 @@ import 'package:data/storage/app_preferences.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:go_router/go_router.dart'; import 'package:style/animations/dismissible_page.dart'; +import 'package:style/theme/theme.dart'; import '../../../components/app_page.dart'; import '../../../components/place_holder_screen.dart'; import '../../../components/snack_bar.dart'; @@ -96,7 +97,7 @@ class _MediaPreviewState extends ConsumerState { _videoPlayerController?.value.isBuffering ?? false, ); _notifier.updateVideoPosition( - _videoPlayerController?.value.position ?? Duration.zero, + position: _videoPlayerController?.value.position ?? Duration.zero, ); _notifier.updateVideoMaxDuration( _videoPlayerController?.value.duration ?? Duration.zero, @@ -173,7 +174,7 @@ class _MediaPreviewState extends ConsumerState { ), ); return AppPage( - backgroundColor: context.colorScheme.surface.withValues( + backgroundColor: appColorSchemeDark.surface.withValues( alpha: 1 - state.swipeDownPercentage, ), body: Stack( @@ -451,8 +452,14 @@ class _MediaPreviewState extends ConsumerState { onChangeEnd: (duration) { _videoPlayerController?.seekTo(duration); }, + onPointerDownOnSlider: (_) { + _notifier.pointerOnSlider(true); + }, + onPointerUpOnSlider: (_) { + _notifier.pointerOnSlider(false); + }, onChanged: (duration) { - _notifier.updateVideoPosition(duration); + _notifier.updateVideoPosition(position: duration, isManual: true); }, ); }, diff --git a/app/lib/ui/flow/media_preview/media_preview_view_model.dart b/app/lib/ui/flow/media_preview/media_preview_view_model.dart index 3a2858b..02c5a97 100644 --- a/app/lib/ui/flow/media_preview/media_preview_view_model.dart +++ b/app/lib/ui/flow/media_preview/media_preview_view_model.dart @@ -409,8 +409,13 @@ class MediaPreviewStateNotifier extends StateNotifier { state = state.copyWith(showActions: !state.showActions); } - void updateVideoPosition(Duration position) { - if (state.videoPosition == position) return; + void updateVideoPosition({ + required Duration position, + bool isManual = false, + }) { + if (state.videoPosition == position || state.pointerOnSlider && !isManual) { + return; + } state = state.copyWith(videoPosition: position); } @@ -438,6 +443,10 @@ class MediaPreviewStateNotifier extends StateNotifier { state = state.copyWith(videoMaxDuration: maxDuration); } + void pointerOnSlider(bool isPointerOnSlider) { + state = state.copyWith(pointerOnSlider: isPointerOnSlider); + } + @override void dispose() { _googleAccountSubscription?.cancel(); @@ -459,6 +468,7 @@ class MediaPreviewState with _$MediaPreviewState { @Default(false) bool isVideoInitialized, @Default(false) bool isVideoBuffering, @Default(false) bool isImageZoomed, + @Default(false) bool pointerOnSlider, @Default(0.0) double swipeDownPercentage, @Default(Duration.zero) Duration videoPosition, @Default(Duration.zero) Duration videoMaxDuration, diff --git a/app/lib/ui/flow/media_preview/media_preview_view_model.freezed.dart b/app/lib/ui/flow/media_preview/media_preview_view_model.freezed.dart index 91ea2a0..ede86d8 100644 --- a/app/lib/ui/flow/media_preview/media_preview_view_model.freezed.dart +++ b/app/lib/ui/flow/media_preview/media_preview_view_model.freezed.dart @@ -26,6 +26,7 @@ mixin _$MediaPreviewState { bool get isVideoInitialized => throw _privateConstructorUsedError; bool get isVideoBuffering => throw _privateConstructorUsedError; bool get isImageZoomed => throw _privateConstructorUsedError; + bool get pointerOnSlider => throw _privateConstructorUsedError; double get swipeDownPercentage => throw _privateConstructorUsedError; Duration get videoPosition => throw _privateConstructorUsedError; Duration get videoMaxDuration => throw _privateConstructorUsedError; @@ -60,6 +61,7 @@ abstract class $MediaPreviewStateCopyWith<$Res> { bool isVideoInitialized, bool isVideoBuffering, bool isImageZoomed, + bool pointerOnSlider, double swipeDownPercentage, Duration videoPosition, Duration videoMaxDuration, @@ -96,6 +98,7 @@ class _$MediaPreviewStateCopyWithImpl<$Res, $Val extends MediaPreviewState> Object? isVideoInitialized = null, Object? isVideoBuffering = null, Object? isImageZoomed = null, + Object? pointerOnSlider = null, Object? swipeDownPercentage = null, Object? videoPosition = null, Object? videoMaxDuration = null, @@ -139,6 +142,10 @@ class _$MediaPreviewStateCopyWithImpl<$Res, $Val extends MediaPreviewState> ? _value.isImageZoomed : isImageZoomed // ignore: cast_nullable_to_non_nullable as bool, + pointerOnSlider: null == pointerOnSlider + ? _value.pointerOnSlider + : pointerOnSlider // ignore: cast_nullable_to_non_nullable + as bool, swipeDownPercentage: null == swipeDownPercentage ? _value.swipeDownPercentage : swipeDownPercentage // ignore: cast_nullable_to_non_nullable @@ -204,6 +211,7 @@ abstract class _$$MediaPreviewStateImplCopyWith<$Res> bool isVideoInitialized, bool isVideoBuffering, bool isImageZoomed, + bool pointerOnSlider, double swipeDownPercentage, Duration videoPosition, Duration videoMaxDuration, @@ -239,6 +247,7 @@ class __$$MediaPreviewStateImplCopyWithImpl<$Res> Object? isVideoInitialized = null, Object? isVideoBuffering = null, Object? isImageZoomed = null, + Object? pointerOnSlider = null, Object? swipeDownPercentage = null, Object? videoPosition = null, Object? videoMaxDuration = null, @@ -282,6 +291,10 @@ class __$$MediaPreviewStateImplCopyWithImpl<$Res> ? _value.isImageZoomed : isImageZoomed // ignore: cast_nullable_to_non_nullable as bool, + pointerOnSlider: null == pointerOnSlider + ? _value.pointerOnSlider + : pointerOnSlider // ignore: cast_nullable_to_non_nullable + as bool, swipeDownPercentage: null == swipeDownPercentage ? _value.swipeDownPercentage : swipeDownPercentage // ignore: cast_nullable_to_non_nullable @@ -328,6 +341,7 @@ class _$MediaPreviewStateImpl implements _MediaPreviewState { this.isVideoInitialized = false, this.isVideoBuffering = false, this.isImageZoomed = false, + this.pointerOnSlider = false, this.swipeDownPercentage = 0.0, this.videoPosition = Duration.zero, this.videoMaxDuration = Duration.zero, @@ -374,6 +388,9 @@ class _$MediaPreviewStateImpl implements _MediaPreviewState { final bool isImageZoomed; @override @JsonKey() + final bool pointerOnSlider; + @override + @JsonKey() final double swipeDownPercentage; @override @JsonKey() @@ -408,7 +425,7 @@ class _$MediaPreviewStateImpl implements _MediaPreviewState { @override String toString() { - return 'MediaPreviewState(googleAccount: $googleAccount, dropboxAccount: $dropboxAccount, error: $error, actionError: $actionError, medias: $medias, currentIndex: $currentIndex, showActions: $showActions, isVideoInitialized: $isVideoInitialized, isVideoBuffering: $isVideoBuffering, isImageZoomed: $isImageZoomed, swipeDownPercentage: $swipeDownPercentage, videoPosition: $videoPosition, videoMaxDuration: $videoMaxDuration, initializedVideoPath: $initializedVideoPath, isVideoPlaying: $isVideoPlaying, uploadMediaProcesses: $uploadMediaProcesses, downloadMediaProcesses: $downloadMediaProcesses)'; + return 'MediaPreviewState(googleAccount: $googleAccount, dropboxAccount: $dropboxAccount, error: $error, actionError: $actionError, medias: $medias, currentIndex: $currentIndex, showActions: $showActions, isVideoInitialized: $isVideoInitialized, isVideoBuffering: $isVideoBuffering, isImageZoomed: $isImageZoomed, pointerOnSlider: $pointerOnSlider, swipeDownPercentage: $swipeDownPercentage, videoPosition: $videoPosition, videoMaxDuration: $videoMaxDuration, initializedVideoPath: $initializedVideoPath, isVideoPlaying: $isVideoPlaying, uploadMediaProcesses: $uploadMediaProcesses, downloadMediaProcesses: $downloadMediaProcesses)'; } @override @@ -434,6 +451,8 @@ class _$MediaPreviewStateImpl implements _MediaPreviewState { other.isVideoBuffering == isVideoBuffering) && (identical(other.isImageZoomed, isImageZoomed) || other.isImageZoomed == isImageZoomed) && + (identical(other.pointerOnSlider, pointerOnSlider) || + other.pointerOnSlider == pointerOnSlider) && (identical(other.swipeDownPercentage, swipeDownPercentage) || other.swipeDownPercentage == swipeDownPercentage) && (identical(other.videoPosition, videoPosition) || @@ -463,6 +482,7 @@ class _$MediaPreviewStateImpl implements _MediaPreviewState { isVideoInitialized, isVideoBuffering, isImageZoomed, + pointerOnSlider, swipeDownPercentage, videoPosition, videoMaxDuration, @@ -493,6 +513,7 @@ abstract class _MediaPreviewState implements MediaPreviewState { final bool isVideoInitialized, final bool isVideoBuffering, final bool isImageZoomed, + final bool pointerOnSlider, final double swipeDownPercentage, final Duration videoPosition, final Duration videoMaxDuration, @@ -523,6 +544,8 @@ abstract class _MediaPreviewState implements MediaPreviewState { @override bool get isImageZoomed; @override + bool get pointerOnSlider; + @override double get swipeDownPercentage; @override Duration get videoPosition;