From 82b875e591224147804c2514234f4e9f7bee3576 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sat, 27 Jul 2019 19:46:32 +0900 Subject: [PATCH] added top overlay --- lib/image_fullscreen_overlay.dart | 52 ++++++++++++++++++++++++++----- lib/image_fullscreen_page.dart | 19 ++++++++--- 2 files changed, 58 insertions(+), 13 deletions(-) diff --git a/lib/image_fullscreen_overlay.dart b/lib/image_fullscreen_overlay.dart index 51f1f2da0..cb30860e4 100644 --- a/lib/image_fullscreen_overlay.dart +++ b/lib/image_fullscreen_overlay.dart @@ -6,24 +6,60 @@ import 'package:aves/model/image_fetcher.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; -class FullscreenOverlay extends StatefulWidget { +class FullscreenTopOverlay extends StatelessWidget { final List entries; final int index; - const FullscreenOverlay({Key key, this.entries, this.index}) : super(key: key); + Map get entry => entries[index]; + + const FullscreenTopOverlay({Key key, this.entries, this.index}) : super(key: key); @override - State createState() => _FullscreenOverlayState(); + Widget build(BuildContext context) { + return ClipRect( + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), + child: SafeArea( + child: Container( + height: kToolbarHeight, + child: AppBar( + title: Text('${index + 1}/${entries.length}'), + actions: [ +// IconButton(icon: Icon(Icons.delete), onPressed: delete), + IconButton(icon: Icon(Icons.share), onPressed: share), + ], + elevation: 0, + backgroundColor: Colors.black26, + ), + ), + ), + ), + ); + } + + delete() {} + + share() { + ImageFetcher.share(entry['uri'], entry['mimeType']); + } } -class _FullscreenOverlayState extends State { +class FullscreenBottomOverlay extends StatefulWidget { + final List entries; + final int index; + + const FullscreenBottomOverlay({Key key, this.entries, this.index}) : super(key: key); + + @override + State createState() => _FullscreenBottomOverlayState(); +} + +class _FullscreenBottomOverlayState extends State { Future _detailLoader; Map _lastDetails; Map get entry => widget.entries[widget.index]; - int get total => widget.entries.length; - @override void initState() { super.initState(); @@ -31,7 +67,7 @@ class _FullscreenOverlayState extends State { } @override - void didUpdateWidget(FullscreenOverlay oldWidget) { + void didUpdateWidget(FullscreenBottomOverlay oldWidget) { super.didUpdateWidget(oldWidget); initDetailLoader(); } @@ -70,7 +106,7 @@ class _FullscreenOverlayState extends State { SizedBox( width: screenWidth, child: Text( - '${widget.index + 1}/$total – ${entry['title']}', + entry['title'], overflow: TextOverflow.ellipsis, ), ), diff --git a/lib/image_fullscreen_page.dart b/lib/image_fullscreen_page.dart index bf1900d65..09599a0df 100644 --- a/lib/image_fullscreen_page.dart +++ b/lib/image_fullscreen_page.dart @@ -25,7 +25,7 @@ class ImageFullscreenPageState extends State with SingleTic PageController _pageController; ValueNotifier _overlayVisible = ValueNotifier(false); AnimationController _overlayAnimationController; - Animation _overlayOffset; + Animation _topOverlayOffset, _bottomOverlayOffset; List get entries => widget.entries; @@ -39,7 +39,8 @@ class ImageFullscreenPageState extends State with SingleTic duration: Duration(milliseconds: 250), vsync: this, ); - _overlayOffset = Tween(begin: Offset(0, 0), end: Offset(0, 1)).animate(CurvedAnimation(parent: _overlayAnimationController, curve: Curves.easeOutQuart, reverseCurve: Curves.easeInQuart)); + _topOverlayOffset = Tween(begin: Offset(0, 0), end: Offset(0, -1)).animate(CurvedAnimation(parent: _overlayAnimationController, curve: Curves.easeOutQuart, reverseCurve: Curves.easeInQuart)); + _bottomOverlayOffset = Tween(begin: Offset(0, 0), end: Offset(0, 1)).animate(CurvedAnimation(parent: _overlayAnimationController, curve: Curves.easeOutQuart, reverseCurve: Curves.easeInQuart)); _overlayVisible.addListener(onOverlayVisibleChange); } @@ -78,17 +79,25 @@ class ImageFullscreenPageState extends State with SingleTic transitionOnUserGestures: true, scrollPhysics: BouncingScrollPhysics(), ), - if (_currentPage != null) + if (_currentPage != null) ...[ + SlideTransition( + position: _topOverlayOffset, + child: FullscreenTopOverlay( + entries: entries, + index: _currentPage, + ), + ), Positioned( bottom: 0, child: SlideTransition( - position: _overlayOffset, - child: FullscreenOverlay( + position: _bottomOverlayOffset, + child: FullscreenBottomOverlay( entries: entries, index: _currentPage, ), ), ) + ] ], ), resizeToAvoidBottomInset: false,