split files
This commit is contained in:
parent
67a5bd3f16
commit
4c49c8831e
4 changed files with 135 additions and 128 deletions
|
@ -3,15 +3,15 @@ import 'dart:math';
|
||||||
|
|
||||||
import 'package:aves/model/image_entry.dart';
|
import 'package:aves/model/image_entry.dart';
|
||||||
import 'package:aves/widgets/fullscreen/info_page.dart';
|
import 'package:aves/widgets/fullscreen/info_page.dart';
|
||||||
import 'package:aves/widgets/fullscreen/overlay.dart';
|
import 'package:aves/widgets/fullscreen/overlay_bottom.dart';
|
||||||
import 'package:chewie/chewie.dart';
|
import 'package:aves/widgets/fullscreen/overlay_top.dart';
|
||||||
|
import 'package:aves/widgets/fullscreen/video.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/scheduler.dart';
|
import 'package:flutter/scheduler.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:photo_view/photo_view.dart';
|
import 'package:photo_view/photo_view.dart';
|
||||||
import 'package:photo_view/photo_view_gallery.dart';
|
import 'package:photo_view/photo_view_gallery.dart';
|
||||||
import 'package:screen/screen.dart';
|
import 'package:screen/screen.dart';
|
||||||
import 'package:video_player/video_player.dart';
|
|
||||||
|
|
||||||
class FullscreenPage extends StatefulWidget {
|
class FullscreenPage extends StatefulWidget {
|
||||||
final List<ImageEntry> entries;
|
final List<ImageEntry> entries;
|
||||||
|
@ -244,46 +244,3 @@ class ImagePageState extends State<ImagePage> with AutomaticKeepAliveClientMixin
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
}
|
}
|
||||||
|
|
||||||
class AvesVideo extends StatefulWidget {
|
|
||||||
final ImageEntry entry;
|
|
||||||
|
|
||||||
const AvesVideo({Key key, this.entry}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<StatefulWidget> createState() => AvesVideoState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class AvesVideoState extends State<AvesVideo> {
|
|
||||||
VideoPlayerController videoPlayerController;
|
|
||||||
ChewieController chewieController;
|
|
||||||
|
|
||||||
ImageEntry get entry => widget.entry;
|
|
||||||
|
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
super.initState();
|
|
||||||
videoPlayerController = VideoPlayerController.file(
|
|
||||||
File(entry.path),
|
|
||||||
);
|
|
||||||
chewieController = ChewieController(
|
|
||||||
videoPlayerController: videoPlayerController,
|
|
||||||
aspectRatio: entry.aspectRatio,
|
|
||||||
autoInitialize: true,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void dispose() {
|
|
||||||
videoPlayerController.dispose();
|
|
||||||
chewieController.dispose();
|
|
||||||
super.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return Chewie(
|
|
||||||
controller: chewieController,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,66 +1,12 @@
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
|
|
||||||
import 'package:aves/model/android_app_service.dart';
|
|
||||||
import 'package:aves/model/image_entry.dart';
|
import 'package:aves/model/image_entry.dart';
|
||||||
import 'package:aves/model/metadata_service.dart';
|
import 'package:aves/model/metadata_service.dart';
|
||||||
import 'package:aves/widgets/common/blurred.dart';
|
import 'package:aves/widgets/common/blurred.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
const kOverlayBackground = Colors.black26;
|
|
||||||
|
|
||||||
class FullscreenTopOverlay extends StatelessWidget {
|
|
||||||
final List<ImageEntry> entries;
|
|
||||||
final int index;
|
|
||||||
final Animation<double> scale;
|
|
||||||
final EdgeInsets viewInsets, viewPadding;
|
|
||||||
|
|
||||||
ImageEntry get entry => entries[index];
|
|
||||||
|
|
||||||
const FullscreenTopOverlay({
|
|
||||||
Key key,
|
|
||||||
this.entries,
|
|
||||||
this.index,
|
|
||||||
this.scale,
|
|
||||||
this.viewInsets,
|
|
||||||
this.viewPadding,
|
|
||||||
}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return SafeArea(
|
|
||||||
minimum: (viewInsets ?? EdgeInsets.zero) + (viewPadding ?? EdgeInsets.zero),
|
|
||||||
child: Padding(
|
|
||||||
padding: EdgeInsets.all(8.0),
|
|
||||||
child: Row(
|
|
||||||
children: [
|
|
||||||
OverlayButton(
|
|
||||||
scale: scale,
|
|
||||||
child: BackButton(),
|
|
||||||
),
|
|
||||||
Spacer(),
|
|
||||||
OverlayButton(
|
|
||||||
scale: scale,
|
|
||||||
child: IconButton(
|
|
||||||
icon: Icon(Icons.share),
|
|
||||||
onPressed: share,
|
|
||||||
tooltip: 'Share',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete() {}
|
|
||||||
|
|
||||||
share() {
|
|
||||||
AndroidAppService.share(entry.uri, entry.mimeType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class FullscreenBottomOverlay extends StatefulWidget {
|
class FullscreenBottomOverlay extends StatefulWidget {
|
||||||
final List<ImageEntry> entries;
|
final List<ImageEntry> entries;
|
||||||
final int index;
|
final int index;
|
||||||
|
@ -111,7 +57,7 @@ class _FullscreenBottomOverlayState extends State<FullscreenBottomOverlay> {
|
||||||
return IgnorePointer(
|
return IgnorePointer(
|
||||||
child: BlurredRect(
|
child: BlurredRect(
|
||||||
child: Container(
|
child: Container(
|
||||||
color: kOverlayBackground,
|
color: Colors.black26,
|
||||||
padding: viewInsets + viewPadding.copyWith(top: 0),
|
padding: viewInsets + viewPadding.copyWith(top: 0),
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: innerPadding,
|
padding: innerPadding,
|
||||||
|
@ -204,30 +150,3 @@ class _FullscreenBottomOverlayContent extends StatelessWidget {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class OverlayButton extends StatelessWidget {
|
|
||||||
final Animation<double> scale;
|
|
||||||
final Widget child;
|
|
||||||
|
|
||||||
const OverlayButton({Key key, this.scale, this.child}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return ScaleTransition(
|
|
||||||
scale: scale,
|
|
||||||
child: BlurredOval(
|
|
||||||
child: Material(
|
|
||||||
type: MaterialType.circle,
|
|
||||||
color: kOverlayBackground,
|
|
||||||
child: Ink(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
border: Border.all(color: Colors.white30, width: 0.5),
|
|
||||||
shape: BoxShape.circle,
|
|
||||||
),
|
|
||||||
child: child,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
82
lib/widgets/fullscreen/overlay_top.dart
Normal file
82
lib/widgets/fullscreen/overlay_top.dart
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
import 'package:aves/model/android_app_service.dart';
|
||||||
|
import 'package:aves/model/image_entry.dart';
|
||||||
|
import 'package:aves/widgets/common/blurred.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class FullscreenTopOverlay extends StatelessWidget {
|
||||||
|
final List<ImageEntry> entries;
|
||||||
|
final int index;
|
||||||
|
final Animation<double> scale;
|
||||||
|
final EdgeInsets viewInsets, viewPadding;
|
||||||
|
|
||||||
|
ImageEntry get entry => entries[index];
|
||||||
|
|
||||||
|
const FullscreenTopOverlay({
|
||||||
|
Key key,
|
||||||
|
this.entries,
|
||||||
|
this.index,
|
||||||
|
this.scale,
|
||||||
|
this.viewInsets,
|
||||||
|
this.viewPadding,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return SafeArea(
|
||||||
|
minimum: (viewInsets ?? EdgeInsets.zero) + (viewPadding ?? EdgeInsets.zero),
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.all(8.0),
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
OverlayButton(
|
||||||
|
scale: scale,
|
||||||
|
child: BackButton(),
|
||||||
|
),
|
||||||
|
Spacer(),
|
||||||
|
OverlayButton(
|
||||||
|
scale: scale,
|
||||||
|
child: IconButton(
|
||||||
|
icon: Icon(Icons.share),
|
||||||
|
onPressed: share,
|
||||||
|
tooltip: 'Share',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
delete() {}
|
||||||
|
|
||||||
|
share() {
|
||||||
|
AndroidAppService.share(entry.uri, entry.mimeType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class OverlayButton extends StatelessWidget {
|
||||||
|
final Animation<double> scale;
|
||||||
|
final Widget child;
|
||||||
|
|
||||||
|
const OverlayButton({Key key, this.scale, this.child}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ScaleTransition(
|
||||||
|
scale: scale,
|
||||||
|
child: BlurredOval(
|
||||||
|
child: Material(
|
||||||
|
type: MaterialType.circle,
|
||||||
|
color: Colors.black26,
|
||||||
|
child: Ink(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border.all(color: Colors.white30, width: 0.5),
|
||||||
|
shape: BoxShape.circle,
|
||||||
|
),
|
||||||
|
child: child,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
49
lib/widgets/fullscreen/video.dart
Normal file
49
lib/widgets/fullscreen/video.dart
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:aves/model/image_entry.dart';
|
||||||
|
import 'package:chewie/chewie.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:video_player/video_player.dart';
|
||||||
|
|
||||||
|
class AvesVideo extends StatefulWidget {
|
||||||
|
final ImageEntry entry;
|
||||||
|
|
||||||
|
const AvesVideo({Key key, this.entry}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<StatefulWidget> createState() => AvesVideoState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class AvesVideoState extends State<AvesVideo> {
|
||||||
|
VideoPlayerController videoPlayerController;
|
||||||
|
ChewieController chewieController;
|
||||||
|
|
||||||
|
ImageEntry get entry => widget.entry;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
videoPlayerController = VideoPlayerController.file(
|
||||||
|
File(entry.path),
|
||||||
|
);
|
||||||
|
chewieController = ChewieController(
|
||||||
|
videoPlayerController: videoPlayerController,
|
||||||
|
aspectRatio: entry.aspectRatio,
|
||||||
|
autoInitialize: true,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
videoPlayerController.dispose();
|
||||||
|
chewieController.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Chewie(
|
||||||
|
controller: chewieController,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue