Merge pull request #71 from krawieck/media-view-better-transition

This commit is contained in:
Marcin Wojnarowski 2020-10-07 00:07:47 +02:00 committed by GitHub
commit c762aa7239
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 44 additions and 29 deletions

View File

@ -10,14 +10,20 @@ import '../widgets/bottom_modal.dart';
/// View to interact with a media object. Zoom in/out, download, share, etc. /// View to interact with a media object. Zoom in/out, download, share, etc.
class MediaViewPage extends HookWidget { class MediaViewPage extends HookWidget {
final String url; final String url;
final GlobalKey<ScaffoldState> _key = GlobalKey();
const MediaViewPage(this.url); MediaViewPage(this.url);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final showButtons = useState(true); final showButtons = useState(true);
final isZoomedOut = useState(true); final isZoomedOut = useState(true);
notImplemented() {
_key.currentState.showSnackBar(SnackBar(
content: Text("this feature hasn't been implemented yet 😰")));
}
useEffect(() { useEffect(() {
if (showButtons.value) { if (showButtons.value) {
SystemChrome.setEnabledSystemUIOverlays([ SystemChrome.setEnabledSystemUIOverlays([
@ -57,6 +63,7 @@ class MediaViewPage extends HookWidget {
title: Text('Share file'), title: Text('Share file'),
onTap: () { onTap: () {
Navigator.of(context).pop(); Navigator.of(context).pop();
notImplemented();
// TODO: share file // TODO: share file
}, },
), ),
@ -67,6 +74,7 @@ class MediaViewPage extends HookWidget {
} }
return Scaffold( return Scaffold(
key: _key,
extendBodyBehindAppBar: true, extendBodyBehindAppBar: true,
extendBody: true, extendBody: true,
appBar: showButtons.value appBar: showButtons.value
@ -83,7 +91,7 @@ class MediaViewPage extends HookWidget {
IconButton( IconButton(
icon: Icon(Icons.file_download), icon: Icon(Icons.file_download),
tooltip: 'download', tooltip: 'download',
onPressed: () {}, onPressed: notImplemented,
), ),
], ],
) )

View File

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import '../pages/community.dart'; import '../pages/community.dart';
import '../pages/full_post.dart'; import '../pages/full_post.dart';
import '../pages/instance.dart'; import '../pages/instance.dart';
import '../pages/media_view.dart';
import '../pages/user.dart'; import '../pages/user.dart';
/// Pushes onto the navigator stack the given widget /// Pushes onto the navigator stack the given widget
@ -59,3 +60,13 @@ abstract class goToUser {
void goToPost(BuildContext context, String instanceUrl, int postId) => goTo( void goToPost(BuildContext context, String instanceUrl, int postId) => goTo(
context, (context) => FullPostPage(instanceUrl: instanceUrl, id: postId)); context, (context) => FullPostPage(instanceUrl: instanceUrl, id: postId));
void goToMedia(BuildContext context, String url) => Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (_, __, ___) => MediaViewPage(url),
transitionDuration: const Duration(milliseconds: 300),
transitionsBuilder: (_, animation, __, child) =>
FadeTransition(opacity: animation, child: child),
),
);

View File

@ -15,13 +15,9 @@ class FullscreenableImage extends StatelessWidget {
@required this.child, @required this.child,
}) : super(key: key); }) : super(key: key);
_onTap(BuildContext c) {
goTo(c, (context) => MediaViewPage(url));
}
@override @override
Widget build(BuildContext context) => InkWell( Widget build(BuildContext context) => InkWell(
onTap: () => _onTap(context), onTap: () => goToMedia(context, url),
child: Hero( child: Hero(
tag: url, tag: url,
child: child, child: child,

View File

@ -28,14 +28,14 @@ packages:
name: async name: async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.4.2" version: "2.5.0-nullsafety.1"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
name: boolean_selector name: boolean_selector
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "2.1.0-nullsafety.1"
build: build:
dependency: transitive dependency: transitive
description: description:
@ -105,14 +105,14 @@ packages:
name: characters name: characters
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.0" version: "1.1.0-nullsafety.3"
charcode: charcode:
dependency: transitive dependency: transitive
description: description:
name: charcode name: charcode
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.3" version: "1.2.0-nullsafety.1"
checked_yaml: checked_yaml:
dependency: transitive dependency: transitive
description: description:
@ -133,7 +133,7 @@ packages:
name: clock name: clock
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.1" version: "1.1.0-nullsafety.1"
code_builder: code_builder:
dependency: transitive dependency: transitive
description: description:
@ -147,7 +147,7 @@ packages:
name: collection name: collection
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.14.13" version: "1.15.0-nullsafety.3"
convert: convert:
dependency: transitive dependency: transitive
description: description:
@ -203,7 +203,7 @@ packages:
name: fake_async name: fake_async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" version: "1.2.0-nullsafety.1"
ffi: ffi:
dependency: transitive dependency: transitive
description: description:
@ -400,14 +400,14 @@ packages:
name: matcher name: matcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.12.8" version: "0.12.10-nullsafety.1"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.8" version: "1.3.0-nullsafety.3"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@ -477,7 +477,7 @@ packages:
name: path name: path
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.7.0" version: "1.8.0-nullsafety.1"
path_provider: path_provider:
dependency: transitive dependency: transitive
description: description:
@ -664,7 +664,7 @@ packages:
name: source_span name: source_span
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.7.0" version: "1.8.0-nullsafety.2"
sqflite: sqflite:
dependency: transitive dependency: transitive
description: description:
@ -685,14 +685,14 @@ packages:
name: stack_trace name: stack_trace
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.9.5" version: "1.10.0-nullsafety.1"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "2.1.0-nullsafety.1"
stream_transform: stream_transform:
dependency: transitive dependency: transitive
description: description:
@ -706,7 +706,7 @@ packages:
name: string_scanner name: string_scanner
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.5" version: "1.1.0-nullsafety.1"
synchronized: synchronized:
dependency: transitive dependency: transitive
description: description:
@ -720,14 +720,14 @@ packages:
name: term_glyph name: term_glyph
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" version: "1.2.0-nullsafety.1"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.17" version: "0.2.19-nullsafety.2"
timeago: timeago:
dependency: "direct main" dependency: "direct main"
description: description:
@ -748,7 +748,7 @@ packages:
name: typed_data name: typed_data
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "1.3.0-nullsafety.3"
url_launcher: url_launcher:
dependency: "direct main" dependency: "direct main"
description: description:
@ -804,7 +804,7 @@ packages:
name: vector_math name: vector_math
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.8" version: "2.1.0-nullsafety.3"
watcher: watcher:
dependency: transitive dependency: transitive
description: description:
@ -841,5 +841,5 @@ packages:
source: hosted source: hosted
version: "2.2.1" version: "2.2.1"
sdks: sdks:
dart: ">=2.9.0 <3.0.0" dart: ">=2.10.0-110 <2.11.0"
flutter: ">=1.20.0 <2.0.0" flutter: ">=1.20.0 <2.0.0"

View File

@ -3,7 +3,7 @@ description: A new Flutter project.
# The following line prevents the package from being accidentally published to # The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages. # pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev publish_to: "none" # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application. # The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43 # A version number is three numbers separated by dots, like 1.2.43
@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 0.1.0 version: 0.1.0
environment: environment:
sdk: '>=2.7.0 <3.0.0' sdk: ">=2.7.0 <3.0.0"
dependencies: dependencies:
# widgets # widgets
@ -32,7 +32,7 @@ dependencies:
# native # native
esys_flutter_share: ^1.0.2 esys_flutter_share: ^1.0.2
url_launcher: ^5.5.1 url_launcher: ^5.5.1
shared_preferences: '>=0.5.0 <2.0.0' shared_preferences: ">=0.5.0 <2.0.0"
package_info: ^0.4.3 package_info: ^0.4.3
# state management # state management