diff --git a/lib/main.dart b/lib/main.dart index 26d9170f9..b4d67fb90 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,7 +2,6 @@ import 'package:aves/model/settings.dart'; import 'package:aves/utils/android_file_utils.dart'; 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/providers/media_query_data_provider.dart'; import 'package:aves/widgets/common/providers/media_store_collection_provider.dart'; @@ -83,9 +82,9 @@ class _HomePageState extends State { return MediaQueryDataProvider( child: FutureBuilder( future: _appSetup, - builder: (futureContext, AsyncSnapshot snapshot) { + builder: (context, AsyncSnapshot snapshot) { if (snapshot.hasError) return const Icon(Icons.error); - if (snapshot.connectionState != ConnectionState.done) return const CircularProgressIndicator(); + if (snapshot.connectionState != ConnectionState.done) return const SizedBox.shrink(); debugPrint('$runtimeType FutureBuilder builder'); return const MediaStoreCollectionPage(); }), @@ -99,12 +98,10 @@ class MediaStoreCollectionPage extends StatelessWidget { @override Widget build(BuildContext context) { debugPrint('$runtimeType build'); - return MediaStoreCollectionProvider( + return const MediaStoreCollectionProvider( child: Scaffold( - // fake app bar so that content is safe from status bar, even though we use a SliverAppBar - appBar: FakeAppBar(), - body: const AllCollectionPage(), - drawer: const AllCollectionDrawer(), + body: AllCollectionPage(), + drawer: AllCollectionDrawer(), resizeToAvoidBottomInset: false, ), ); diff --git a/lib/widgets/album/collection_section.dart b/lib/widgets/album/collection_section.dart index 881b719c3..a301087d8 100644 --- a/lib/widgets/album/collection_section.dart +++ b/lib/widgets/album/collection_section.dart @@ -7,19 +7,18 @@ 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'; +import 'package:provider/provider.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 @@ -35,16 +34,21 @@ class SectionSliver extends StatelessWidget { delegate: SliverChildBuilderDelegate( // TODO TLAD find out why thumbnails are rebuilt (with `initState`) when: // - config change (show/hide status bar) - // - navigating away/back - (sliverContext, index) { + (context, 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, + key: ValueKey(entry.uri), + onTap: () => _showFullscreen(context, entry), + child: Selector( + selector: (c, mq) => mq.size.width, + builder: (c, mqWidth, child) { + return Thumbnail( + entry: entry, + extent: mqWidth / columnCount, + ); + }, ), ); }, @@ -52,6 +56,7 @@ class SectionSliver extends StatelessWidget { addAutomaticKeepAlives: false, addRepaintBoundaries: true, ), + // TODO TLAD custom SliverGridDelegate / SliverGridLayout to lerp between columnCount gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: columnCount, ), diff --git a/lib/widgets/album/thumbnail.dart b/lib/widgets/album/thumbnail.dart index 82c865e09..3268ad332 100644 --- a/lib/widgets/album/thumbnail.dart +++ b/lib/widgets/album/thumbnail.dart @@ -18,7 +18,6 @@ class Thumbnail extends StatelessWidget { @override Widget build(BuildContext context) { final image = ImagePreview( - key: ValueKey(entry.uri), entry: entry, width: extent, height: extent, diff --git a/lib/widgets/album/thumbnail_collection.dart b/lib/widgets/album/thumbnail_collection.dart index 810a04257..65d5cf9f4 100644 --- a/lib/widgets/album/thumbnail_collection.dart +++ b/lib/widgets/album/thumbnail_collection.dart @@ -17,16 +17,9 @@ class ThumbnailCollection extends AnimatedWidget { @override Widget build(BuildContext context) { - return Selector( - selector: (c, mq) => mq.size.width, - builder: (c, mqWidth, child) { - debugPrint('$runtimeType builder mqWidth=$mqWidth'); - return ThumbnailCollectionContent( - collection: collection, - appBar: appBar, - screenWidth: mqWidth, - ); - }, + return ThumbnailCollectionContent( + collection: collection, + appBar: appBar, ); } } @@ -34,7 +27,6 @@ class ThumbnailCollection extends AnimatedWidget { class ThumbnailCollectionContent extends StatelessWidget { final ImageCollection collection; final Widget appBar; - final double screenWidth; final Map> _sections; final ScrollController _scrollController = ScrollController(); @@ -43,7 +35,6 @@ class ThumbnailCollectionContent extends StatelessWidget { Key key, @required this.collection, @required this.appBar, - @required this.screenWidth, }) : _sections = collection.sections, super(key: key); @@ -82,7 +73,6 @@ class ThumbnailCollectionContent extends StatelessWidget { collection: collection, sections: _sections, sectionKey: sectionKey, - screenWidth: screenWidth, ); if (sectionKey == sectionKeys.last) { sliver = SliverPadding( diff --git a/lib/widgets/common/fake_app_bar.dart b/lib/widgets/common/fake_app_bar.dart deleted file mode 100644 index 1a0308b2c..000000000 --- a/lib/widgets/common/fake_app_bar.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter/widgets.dart'; - -class FakeAppBar extends StatelessWidget with PreferredSizeWidget { - @override - Widget build(BuildContext context) { - return const SafeArea(child: SizedBox.shrink()); - } - - @override - Size get preferredSize => Size.zero; -} diff --git a/lib/widgets/common/image_preview.dart b/lib/widgets/common/image_preview.dart index ace0c7d11..d2ca058a1 100644 --- a/lib/widgets/common/image_preview.dart +++ b/lib/widgets/common/image_preview.dart @@ -52,6 +52,7 @@ class ImagePreviewState extends State with AfterInitMixin { @override void didUpdateWidget(ImagePreview old) { +// debugPrint('$runtimeType didUpdateWidget from=${old.entry.path} to=${entry.path}'); super.didUpdateWidget(old); if (widget.width == old.width && widget.height == old.height && uri == old.entry.uri && widget.entry.width == old.entry.width && widget.entry.height == old.entry.height && widget.entry.orientationDegrees == old.entry.orientationDegrees) return; _initByteLoader(); @@ -67,12 +68,14 @@ class ImagePreviewState extends State with AfterInitMixin { @override void dispose() { +// debugPrint('$runtimeType dispose path=${entry.path}'); _entryChangeNotifier.removeListener(_onEntryChange); super.dispose(); } @override Widget build(BuildContext context) { +// debugPrint('$runtimeType build path=${entry.path}'); return FutureBuilder( future: _byteLoader, builder: (futureContext, AsyncSnapshot snapshot) { diff --git a/lib/widgets/debug_page.dart b/lib/widgets/debug_page.dart index c5f2a3d77..a4f60651a 100644 --- a/lib/widgets/debug_page.dart +++ b/lib/widgets/debug_page.dart @@ -65,7 +65,7 @@ class DebugPageState extends State { ), FutureBuilder( future: _dbMetadataLoader, - builder: (futureContext, AsyncSnapshot> snapshot) { + builder: (context, AsyncSnapshot> snapshot) { if (snapshot.hasError) return Text(snapshot.error.toString()); if (snapshot.connectionState != ConnectionState.done) return const SizedBox.shrink(); return Text('DB metadata rows: ${snapshot.data.length}'); @@ -73,7 +73,7 @@ class DebugPageState extends State { ), FutureBuilder( future: _dbAddressLoader, - builder: (futureContext, AsyncSnapshot> snapshot) { + builder: (context, AsyncSnapshot> snapshot) { if (snapshot.hasError) return Text(snapshot.error.toString()); if (snapshot.connectionState != ConnectionState.done) return const SizedBox.shrink(); return Text('DB address rows: ${snapshot.data.length}'); diff --git a/lib/widgets/fullscreen/image_page.dart b/lib/widgets/fullscreen/image_page.dart index 123683b5d..43d2bc4b9 100644 --- a/lib/widgets/fullscreen/image_page.dart +++ b/lib/widgets/fullscreen/image_page.dart @@ -41,7 +41,7 @@ class ImagePageState extends State with AutomaticKeepAliveClientMixin selector: (c, mq) => mq.size, builder: (c, mqSize, child) => PhotoViewGallery.builder( itemCount: entries.length, - builder: (galleryContext, index) { + builder: (context, index) { final entry = entries[index]; if (entry.isVideo) { final videoController = widget.videoControllers.firstWhere((kv) => kv.item1 == entry.path, orElse: () => null)?.item2;