From aafcc1da630974368b16efb3e800fe0203b4fc07 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Thu, 26 Dec 2019 22:06:31 +0900 Subject: [PATCH] fullscreen: fixed route transition --- lib/main.dart | 6 +- lib/model/image_collection.dart | 2 +- lib/model/image_entry.dart | 2 +- lib/utils/geo_utils.dart | 4 +- lib/widgets/album/all_collection_drawer.dart | 8 +- lib/widgets/album/collection_section.dart | 121 ++++++++++++++++ .../album/filtered_collection_page.dart | 2 +- lib/widgets/album/search_delegate.dart | 2 +- lib/widgets/album/sections.dart | 2 +- lib/widgets/album/thumbnail_collection.dart | 129 +----------------- .../transparent_material_page_route.dart | 16 +++ lib/widgets/common/{ => fx}/blurred.dart | 0 .../common/{ => fx}/outlined_text.dart | 0 lib/widgets/common/image_preview.dart | 2 +- .../media_query_data_provider.dart | 0 .../media_store_collection_provider.dart | 0 lib/widgets/debug_page.dart | 2 +- lib/widgets/fullscreen/fullscreen_page.dart | 51 +++---- .../fullscreen/info/basic_section.dart | 2 +- lib/widgets/fullscreen/info/info_page.dart | 2 +- .../fullscreen/info/location_section.dart | 2 +- lib/widgets/fullscreen/overlay/bottom.dart | 2 +- lib/widgets/fullscreen/overlay/common.dart | 2 +- lib/widgets/fullscreen/overlay/video.dart | 2 +- 24 files changed, 186 insertions(+), 175 deletions(-) create mode 100644 lib/widgets/album/collection_section.dart create mode 100644 lib/widgets/album/transparent_material_page_route.dart rename lib/widgets/common/{ => fx}/blurred.dart (100%) rename lib/widgets/common/{ => fx}/outlined_text.dart (100%) rename lib/widgets/common/{ => providers}/media_query_data_provider.dart (100%) rename lib/widgets/common/{ => providers}/media_store_collection_provider.dart (100%) diff --git a/lib/main.dart b/lib/main.dart index 25c663ec3..26d9170f9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,8 +4,8 @@ import 'package:aves/widgets/album/all_collection_drawer.dart'; import 'package:aves/widgets/album/all_collection_page.dart'; import 'package:aves/widgets/common/fake_app_bar.dart'; import 'package:aves/widgets/common/icons.dart'; -import 'package:aves/widgets/common/media_query_data_provider.dart'; -import 'package:aves/widgets/common/media_store_collection_provider.dart'; +import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; +import 'package:aves/widgets/common/providers/media_store_collection_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:pedantic/pedantic.dart'; @@ -64,7 +64,7 @@ class _HomePageState extends State { // TODO reduce permission check time // TODO TLAD ask android.permission.ACCESS_MEDIA_LOCATION (unredacted EXIF with scoped storage) final permissions = await PermissionHandler().requestPermissions([ - PermissionGroup.storage + PermissionGroup.storage, ]); // 350ms if (permissions[PermissionGroup.storage] != PermissionStatus.granted) { unawaited(SystemNavigator.pop()); diff --git a/lib/model/image_collection.dart b/lib/model/image_collection.dart index da2194f8c..85471227f 100644 --- a/lib/model/image_collection.dart +++ b/lib/model/image_collection.dart @@ -60,7 +60,7 @@ class ImageCollection with ChangeNotifier { break; case SortFactor.size: sections = Map.fromEntries([ - MapEntry('All', _rawEntries) + MapEntry('All', _rawEntries), ]); break; } diff --git a/lib/model/image_entry.dart b/lib/model/image_entry.dart index db7caab4f..7c63c7a18 100644 --- a/lib/model/image_entry.dart +++ b/lib/model/image_entry.dart @@ -181,7 +181,7 @@ class ImageEntry { return { addressDetails.countryName, addressDetails.adminArea, - addressDetails.locality + addressDetails.locality, }.where((part) => part != null && part.isNotEmpty).join(', '); } diff --git a/lib/utils/geo_utils.dart b/lib/utils/geo_utils.dart index 506c1b29f..091f38092 100644 --- a/lib/utils/geo_utils.dart +++ b/lib/utils/geo_utils.dart @@ -13,7 +13,7 @@ String _decimal2sexagesimal(final double dec) { final List tmp = NumberFormat('0.0#####').format(_round(value, decimals: 10)).split('.'); return [ int.parse(tmp[0]).abs(), - int.parse(tmp[1]) + int.parse(tmp[1]), ]; } @@ -39,6 +39,6 @@ List toDMS(Tuple2 latLng) { final lng = latLng.item2; return [ '${_decimal2sexagesimal(lat)} ${lat < 0 ? 'S' : 'N'}', - '${_decimal2sexagesimal(lng)} ${lng < 0 ? 'W' : 'E'}' + '${_decimal2sexagesimal(lng)} ${lng < 0 ? 'W' : 'E'}', ]; } diff --git a/lib/widgets/album/all_collection_drawer.dart b/lib/widgets/album/all_collection_drawer.dart index bdf34194e..033be21cd 100644 --- a/lib/widgets/album/all_collection_drawer.dart +++ b/lib/widgets/album/all_collection_drawer.dart @@ -60,22 +60,22 @@ class AllCollectionDrawer extends StatelessWidget { Row(children: [ Icon(Icons.photo_library), const SizedBox(width: 4), - Text('${collection.imageCount}') + Text('${collection.imageCount}'), ]), Row(children: [ Icon(Icons.video_library), const SizedBox(width: 4), - Text('${collection.videoCount}') + Text('${collection.videoCount}'), ]), Row(children: [ Icon(Icons.photo_album), const SizedBox(width: 4), - Text('${collection.albumCount}') + Text('${collection.albumCount}'), ]), Row(children: [ Icon(Icons.label), const SizedBox(width: 4), - Text('${collection.tagCount}') + Text('${collection.tagCount}'), ]), ], ), diff --git a/lib/widgets/album/collection_section.dart b/lib/widgets/album/collection_section.dart new file mode 100644 index 000000000..881b719c3 --- /dev/null +++ b/lib/widgets/album/collection_section.dart @@ -0,0 +1,121 @@ +import 'package:aves/model/image_collection.dart'; +import 'package:aves/model/image_entry.dart'; +import 'package:aves/widgets/album/sections.dart'; +import 'package:aves/widgets/album/thumbnail.dart'; +import 'package:aves/widgets/album/transparent_material_page_route.dart'; +import 'package:aves/widgets/common/icons.dart'; +import 'package:aves/widgets/fullscreen/fullscreen_page.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_sticky_header/flutter_sticky_header.dart'; + +class SectionSliver extends StatelessWidget { + final ImageCollection collection; + final Map> sections; + final dynamic sectionKey; + final double screenWidth; + + const SectionSliver({ + Key key, + @required this.collection, + @required this.sections, + @required this.sectionKey, + @required this.screenWidth, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + const columnCount = 4; + return SliverStickyHeader( + header: SectionHeader( + collection: collection, + sections: sections, + sectionKey: sectionKey, + ), + sliver: SliverGrid( + delegate: SliverChildBuilderDelegate( + // TODO TLAD find out why thumbnails are rebuilt (with `initState`) when: + // - config change (show/hide status bar) + // - navigating away/back + (sliverContext, index) { + final sectionEntries = sections[sectionKey]; + if (index >= sectionEntries.length) return null; + final entry = sectionEntries[index]; + return GestureDetector( + onTap: () => _showFullscreen(sliverContext, entry), + child: Thumbnail( + entry: entry, + extent: screenWidth / columnCount, + ), + ); + }, + childCount: sections[sectionKey].length, + addAutomaticKeepAlives: false, + addRepaintBoundaries: true, + ), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: columnCount, + ), + ), + overlapsContent: false, + ); + } + + void _showFullscreen(BuildContext context, ImageEntry entry) { + Navigator.push( + context, + TransparentMaterialPageRoute( + pageBuilder: (context, _, __) => FullscreenPage( + collection: collection, + initialUri: entry.uri, + ), + ), + ); + } +} + +class SectionHeader extends StatelessWidget { + final ImageCollection collection; + final Map> sections; + final dynamic sectionKey; + + const SectionHeader({ + Key key, + @required this.collection, + @required this.sections, + @required this.sectionKey, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + Widget header = const SizedBox.shrink(); + if (collection.sortFactor == SortFactor.date) { + switch (collection.groupFactor) { + case GroupFactor.album: + Widget albumIcon = IconUtils.getAlbumIcon(context, sectionKey as String); + if (albumIcon != null) { + albumIcon = Material( + type: MaterialType.circle, + elevation: 3, + color: Colors.transparent, + shadowColor: Colors.black, + child: albumIcon, + ); + } + header = TitleSectionHeader( + leading: albumIcon, + title: collection.getUniqueAlbumName(sectionKey as String, sections.keys.cast()), + ); + break; + case GroupFactor.month: + header = MonthSectionHeader(date: sectionKey as DateTime); + break; + case GroupFactor.day: + header = DaySectionHeader(date: sectionKey as DateTime); + break; + } + } + return IgnorePointer( + child: header, + ); + } +} diff --git a/lib/widgets/album/filtered_collection_page.dart b/lib/widgets/album/filtered_collection_page.dart index e36c3c10d..4b519e36e 100644 --- a/lib/widgets/album/filtered_collection_page.dart +++ b/lib/widgets/album/filtered_collection_page.dart @@ -1,7 +1,7 @@ import 'package:aves/model/image_collection.dart'; import 'package:aves/model/image_entry.dart'; import 'package:aves/widgets/album/thumbnail_collection.dart'; -import 'package:aves/widgets/common/media_query_data_provider.dart'; +import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:flutter/material.dart'; class FilteredCollectionPage extends StatelessWidget { diff --git a/lib/widgets/album/search_delegate.dart b/lib/widgets/album/search_delegate.dart index adf4e6d1d..2e64448bf 100644 --- a/lib/widgets/album/search_delegate.dart +++ b/lib/widgets/album/search_delegate.dart @@ -1,7 +1,7 @@ import 'package:aves/model/image_collection.dart'; import 'package:aves/model/image_entry.dart'; import 'package:aves/widgets/album/thumbnail_collection.dart'; -import 'package:aves/widgets/common/media_query_data_provider.dart'; +import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:flutter/material.dart'; class ImageSearchDelegate extends SearchDelegate { diff --git a/lib/widgets/album/sections.dart b/lib/widgets/album/sections.dart index e09cd5e32..bca2b8c71 100644 --- a/lib/widgets/album/sections.dart +++ b/lib/widgets/album/sections.dart @@ -1,5 +1,5 @@ import 'package:aves/utils/time_utils.dart'; -import 'package:aves/widgets/common/outlined_text.dart'; +import 'package:aves/widgets/common/fx/outlined_text.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; diff --git a/lib/widgets/album/thumbnail_collection.dart b/lib/widgets/album/thumbnail_collection.dart index ef9ec381e..810a04257 100644 --- a/lib/widgets/album/thumbnail_collection.dart +++ b/lib/widgets/album/thumbnail_collection.dart @@ -1,12 +1,8 @@ import 'package:aves/model/image_collection.dart'; import 'package:aves/model/image_entry.dart'; -import 'package:aves/widgets/album/sections.dart'; -import 'package:aves/widgets/album/thumbnail.dart'; -import 'package:aves/widgets/common/icons.dart'; -import 'package:aves/widgets/fullscreen/fullscreen_page.dart'; +import 'package:aves/widgets/album/collection_section.dart'; import 'package:draggable_scrollbar/draggable_scrollbar.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_sticky_header/flutter_sticky_header.dart'; import 'package:provider/provider.dart'; class ThumbnailCollection extends AnimatedWidget { @@ -103,126 +99,3 @@ class ThumbnailCollectionContent extends StatelessWidget { ); } } - -class SectionSliver extends StatelessWidget { - final ImageCollection collection; - final Map> sections; - final dynamic sectionKey; - final double screenWidth; - - const SectionSliver({ - Key key, - @required this.collection, - @required this.sections, - @required this.sectionKey, - @required this.screenWidth, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - const columnCount = 4; - return SliverStickyHeader( - header: SectionHeader( - collection: collection, - sections: sections, - sectionKey: sectionKey, - ), - sliver: SliverGrid( - delegate: SliverChildBuilderDelegate( - // TODO TLAD find out why thumbnails are rebuilt (with `initState`) when: - // - config change (show/hide status bar) - // - navigating away/back - (sliverContext, index) { - final sectionEntries = sections[sectionKey]; - if (index >= sectionEntries.length) return null; - final entry = sectionEntries[index]; - return GestureDetector( - onTap: () => _showFullscreen(sliverContext, entry), - child: Thumbnail( - entry: entry, - extent: screenWidth / columnCount, - ), - ); - }, - childCount: sections[sectionKey].length, - addAutomaticKeepAlives: false, - addRepaintBoundaries: true, - ), - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: columnCount, - ), - ), - overlapsContent: false, - ); - } - - void _showFullscreen(BuildContext context, ImageEntry entry) { -// Navigator.push( -// context, -// MaterialPageRoute( -// builder: (context) => FullscreenPage( -// collection: collection, -// initialUri: entry.uri, -// ), -// ), -// ); - // TODO TLAD consider the following to have transparency while popping fullscreen by drag down - Navigator.push( - context, - PageRouteBuilder( - opaque: false, - pageBuilder: (BuildContext context, _, __) => FullscreenPage( - collection: collection, - initialUri: entry.uri, - ), - ), - ); - } -} - -class SectionHeader extends StatelessWidget { - final ImageCollection collection; - final Map> sections; - final dynamic sectionKey; - - const SectionHeader({ - Key key, - @required this.collection, - @required this.sections, - @required this.sectionKey, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - Widget header = const SizedBox.shrink(); - if (collection.sortFactor == SortFactor.date) { - switch (collection.groupFactor) { - case GroupFactor.album: - Widget albumIcon = IconUtils.getAlbumIcon(context, sectionKey as String); - if (albumIcon != null) { - albumIcon = Material( - type: MaterialType.circle, - elevation: 3, - color: Colors.transparent, - shadowColor: Colors.black, - child: albumIcon, - ); - } - header = TitleSectionHeader( - leading: albumIcon, - title: collection.getUniqueAlbumName(sectionKey as String, sections.keys.cast()), - ); - break; - case GroupFactor.month: - header = MonthSectionHeader(date: sectionKey as DateTime); - break; - case GroupFactor.day: - header = DaySectionHeader(date: sectionKey as DateTime); - break; - } - } - return IgnorePointer( - child: header, - ); - } -} diff --git a/lib/widgets/album/transparent_material_page_route.dart b/lib/widgets/album/transparent_material_page_route.dart new file mode 100644 index 000000000..a7ebf4776 --- /dev/null +++ b/lib/widgets/album/transparent_material_page_route.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; + +class TransparentMaterialPageRoute extends PageRouteBuilder { + TransparentMaterialPageRoute({ + @required RoutePageBuilder pageBuilder, + }) : super(pageBuilder: pageBuilder); + + @override + bool get opaque => false; + + @override + Widget buildTransitions(BuildContext context, Animation animation, Animation secondaryAnimation, Widget child) { + final PageTransitionsTheme theme = Theme.of(context).pageTransitionsTheme; + return theme.buildTransitions(this, context, animation, secondaryAnimation, child); + } +} diff --git a/lib/widgets/common/blurred.dart b/lib/widgets/common/fx/blurred.dart similarity index 100% rename from lib/widgets/common/blurred.dart rename to lib/widgets/common/fx/blurred.dart diff --git a/lib/widgets/common/outlined_text.dart b/lib/widgets/common/fx/outlined_text.dart similarity index 100% rename from lib/widgets/common/outlined_text.dart rename to lib/widgets/common/fx/outlined_text.dart diff --git a/lib/widgets/common/image_preview.dart b/lib/widgets/common/image_preview.dart index 74e058f1b..ace0c7d11 100644 --- a/lib/widgets/common/image_preview.dart +++ b/lib/widgets/common/image_preview.dart @@ -39,7 +39,7 @@ class ImagePreviewState extends State with AfterInitMixin { super.initState(); _entryChangeNotifier = Listenable.merge([ entry.imageChangeNotifier, - entry.metadataChangeNotifier + entry.metadataChangeNotifier, ]); _entryChangeNotifier.addListener(_onEntryChange); } diff --git a/lib/widgets/common/media_query_data_provider.dart b/lib/widgets/common/providers/media_query_data_provider.dart similarity index 100% rename from lib/widgets/common/media_query_data_provider.dart rename to lib/widgets/common/providers/media_query_data_provider.dart diff --git a/lib/widgets/common/media_store_collection_provider.dart b/lib/widgets/common/providers/media_store_collection_provider.dart similarity index 100% rename from lib/widgets/common/media_store_collection_provider.dart rename to lib/widgets/common/providers/media_store_collection_provider.dart diff --git a/lib/widgets/debug_page.dart b/lib/widgets/debug_page.dart index e9459c574..c5f2a3d77 100644 --- a/lib/widgets/debug_page.dart +++ b/lib/widgets/debug_page.dart @@ -3,7 +3,7 @@ import 'package:aves/model/image_metadata.dart'; import 'package:aves/model/metadata_db.dart'; import 'package:aves/model/settings.dart'; import 'package:aves/utils/android_file_utils.dart'; -import 'package:aves/widgets/common/media_query_data_provider.dart'; +import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; diff --git a/lib/widgets/fullscreen/fullscreen_page.dart b/lib/widgets/fullscreen/fullscreen_page.dart index f5c705474..680c6b113 100644 --- a/lib/widgets/fullscreen/fullscreen_page.dart +++ b/lib/widgets/fullscreen/fullscreen_page.dart @@ -3,7 +3,7 @@ import 'dart:math'; import 'package:aves/model/image_collection.dart'; import 'package:aves/model/image_entry.dart'; -import 'package:aves/widgets/common/media_query_data_provider.dart'; +import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves/widgets/fullscreen/fullscreen_action_delegate.dart'; import 'package:aves/widgets/fullscreen/image_page.dart'; import 'package:aves/widgets/fullscreen/info/info_page.dart'; @@ -298,7 +298,7 @@ class FullscreenVerticalPageView extends StatefulWidget { class _FullscreenVerticalPageViewState extends State { bool _isInitialScale = true; - Color _background = Colors.black; + ValueNotifier _backgroundColorNotifier = ValueNotifier(Colors.black); @override void initState() { @@ -328,24 +328,25 @@ class _FullscreenVerticalPageViewState extends State } void _onVerticalPageControllerChange() { - setState(() => _background = _background.withOpacity(min(1.0, widget.verticalPager.page))); + _backgroundColorNotifier.value = _backgroundColorNotifier.value.withOpacity(min(1.0, widget.verticalPager.page)); } @override Widget build(BuildContext context) { - return PageView( - scrollDirection: Axis.vertical, - controller: widget.verticalPager, - physics: _isInitialScale ? const PageScrollPhysics() : const NeverScrollableScrollPhysics(), - onPageChanged: widget.onVerticalPageChanged, - children: [ - Container( - color: _background, - child: const SizedBox(), - ), - Container( - color: _background, - child: ImagePage( + return ValueListenableBuilder( + valueListenable: _backgroundColorNotifier, + builder: (context, backgroundColor, child) => Container( + color: backgroundColor, + child: child, + ), + child: PageView( + scrollDirection: Axis.vertical, + controller: widget.verticalPager, + physics: _isInitialScale ? const PageScrollPhysics() : const NeverScrollableScrollPhysics(), + onPageChanged: widget.onVerticalPageChanged, + children: [ + const SizedBox(), + ImagePage( collection: widget.collection, pageController: widget.horizontalPager, onTap: widget.onImageTap, @@ -353,15 +354,15 @@ class _FullscreenVerticalPageViewState extends State onScaleChanged: (state) => setState(() => _isInitialScale = state == PhotoViewScaleState.initial), videoControllers: widget.videoControllers, ), - ), - NotificationListener( - onNotification: (notification) { - if (notification is BackUpNotification) widget.onImagePageRequested(); - return false; - }, - child: InfoPage(collection: widget.collection, entry: widget.entry), - ), - ], + NotificationListener( + onNotification: (notification) { + if (notification is BackUpNotification) widget.onImagePageRequested(); + return false; + }, + child: InfoPage(collection: widget.collection, entry: widget.entry), + ), + ], + ), ); } } diff --git a/lib/widgets/fullscreen/info/basic_section.dart b/lib/widgets/fullscreen/info/basic_section.dart index 78c9bc191..c36901ba5 100644 --- a/lib/widgets/fullscreen/info/basic_section.dart +++ b/lib/widgets/fullscreen/info/basic_section.dart @@ -37,7 +37,7 @@ class BasicSection extends StatelessWidget { if (rotation != null) InfoRow('Rotation', '$rotation°'); return [ InfoRow('Duration', entry.durationText), - if (rotation != null) InfoRow('Rotation', '$rotation°') + if (rotation != null) InfoRow('Rotation', '$rotation°'), ]; } } diff --git a/lib/widgets/fullscreen/info/info_page.dart b/lib/widgets/fullscreen/info/info_page.dart index e72ba39f9..94ae5df57 100644 --- a/lib/widgets/fullscreen/info/info_page.dart +++ b/lib/widgets/fullscreen/info/info_page.dart @@ -1,6 +1,6 @@ import 'package:aves/model/image_collection.dart'; import 'package:aves/model/image_entry.dart'; -import 'package:aves/widgets/common/media_query_data_provider.dart'; +import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves/widgets/fullscreen/info/basic_section.dart'; import 'package:aves/widgets/fullscreen/info/location_section.dart'; import 'package:aves/widgets/fullscreen/info/metadata_section.dart'; diff --git a/lib/widgets/fullscreen/info/location_section.dart b/lib/widgets/fullscreen/info/location_section.dart index decb77ed8..06d353622 100644 --- a/lib/widgets/fullscreen/info/location_section.dart +++ b/lib/widgets/fullscreen/info/location_section.dart @@ -17,7 +17,7 @@ class LocationSection extends AnimatedWidget { key: key, listenable: Listenable.merge([ entry.metadataChangeNotifier, - entry.addressChangeNotifier + entry.addressChangeNotifier, ])); @override diff --git a/lib/widgets/fullscreen/overlay/bottom.dart b/lib/widgets/fullscreen/overlay/bottom.dart index 46d8f34c4..6c9de5382 100644 --- a/lib/widgets/fullscreen/overlay/bottom.dart +++ b/lib/widgets/fullscreen/overlay/bottom.dart @@ -6,7 +6,7 @@ import 'package:aves/model/image_metadata.dart'; import 'package:aves/model/metadata_service.dart'; import 'package:aves/utils/constants.dart'; import 'package:aves/utils/geo_utils.dart'; -import 'package:aves/widgets/common/blurred.dart'; +import 'package:aves/widgets/common/fx/blurred.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; diff --git a/lib/widgets/fullscreen/overlay/common.dart b/lib/widgets/fullscreen/overlay/common.dart index cdc964131..dc94713a8 100644 --- a/lib/widgets/fullscreen/overlay/common.dart +++ b/lib/widgets/fullscreen/overlay/common.dart @@ -1,4 +1,4 @@ -import 'package:aves/widgets/common/blurred.dart'; +import 'package:aves/widgets/common/fx/blurred.dart'; import 'package:flutter/material.dart'; class OverlayButton extends StatelessWidget { diff --git a/lib/widgets/fullscreen/overlay/video.dart b/lib/widgets/fullscreen/overlay/video.dart index 24734c1b9..29a00daf6 100644 --- a/lib/widgets/fullscreen/overlay/video.dart +++ b/lib/widgets/fullscreen/overlay/video.dart @@ -1,7 +1,7 @@ import 'package:aves/model/image_entry.dart'; import 'package:aves/utils/android_app_service.dart'; import 'package:aves/utils/time_utils.dart'; -import 'package:aves/widgets/common/blurred.dart'; +import 'package:aves/widgets/common/fx/blurred.dart'; import 'package:aves/widgets/fullscreen/overlay/common.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart';