...
This commit is contained in:
@ -8,14 +8,21 @@ import 'package:f0ckapp/widgets/video_widget.dart';
|
||||
|
||||
class FullScreenMediaView extends StatefulWidget {
|
||||
final MediaItem item;
|
||||
final Duration? initialPosition;
|
||||
|
||||
const FullScreenMediaView({super.key, required this.item});
|
||||
const FullScreenMediaView({
|
||||
super.key,
|
||||
required this.item,
|
||||
this.initialPosition,
|
||||
});
|
||||
|
||||
@override
|
||||
State createState() => _FullScreenMediaViewState();
|
||||
}
|
||||
|
||||
class _FullScreenMediaViewState extends State<FullScreenMediaView> {
|
||||
final GlobalKey<VideoWidgetState> _videoKey = GlobalKey<VideoWidgetState>();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
@ -30,44 +37,59 @@ class _FullScreenMediaViewState extends State<FullScreenMediaView> {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void _popWithPosition() {
|
||||
Duration? currentPosition;
|
||||
if (widget.item.mime.startsWith('video') && _videoKey.currentState != null) {
|
||||
currentPosition = _videoKey.currentState!.videoController.value.position;
|
||||
}
|
||||
Navigator.of(context).pop(currentPosition);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.black,
|
||||
body: Stack(
|
||||
children: [
|
||||
Positioned.fill(
|
||||
child: widget.item.mime.startsWith('image')
|
||||
? InteractiveViewer(
|
||||
minScale: 1.0,
|
||||
maxScale: 7.0,
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: widget.item.mediaUrl,
|
||||
fit: BoxFit.contain,
|
||||
placeholder: (context, url) =>
|
||||
const Center(child: CircularProgressIndicator()),
|
||||
errorWidget: (context, url, error) =>
|
||||
const Icon(Icons.error),
|
||||
return PopScope(
|
||||
onPopInvokedWithResult: (bool didPop, Object? result) async {
|
||||
return _popWithPosition();
|
||||
},
|
||||
child: Scaffold(
|
||||
backgroundColor: Colors.black,
|
||||
body: Stack(
|
||||
children: [
|
||||
Positioned.fill(
|
||||
child: widget.item.mime.startsWith('image')
|
||||
? InteractiveViewer(
|
||||
minScale: 1.0,
|
||||
maxScale: 7.0,
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: widget.item.mediaUrl,
|
||||
fit: BoxFit.contain,
|
||||
placeholder: (context, url) =>
|
||||
const Center(child: CircularProgressIndicator()),
|
||||
errorWidget: (context, url, error) =>
|
||||
const Icon(Icons.error),
|
||||
),
|
||||
)
|
||||
: Center(
|
||||
child: VideoWidget(
|
||||
key: _videoKey,
|
||||
details: widget.item,
|
||||
isActive: true,
|
||||
fullScreen: true,
|
||||
initialPosition: widget.initialPosition,
|
||||
),
|
||||
),
|
||||
)
|
||||
: Center(
|
||||
child: VideoWidget(
|
||||
details: widget.item,
|
||||
isActive: true,
|
||||
fullScreen: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
SafeArea(
|
||||
child: Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: IconButton(
|
||||
icon: const Icon(Icons.arrow_back, color: Colors.white),
|
||||
onPressed: () => Navigator.of(context).pop(),
|
||||
),
|
||||
SafeArea(
|
||||
child: Align(
|
||||
alignment: Alignment.topLeft,
|
||||
child: IconButton(
|
||||
icon: const Icon(Icons.arrow_back, color: Colors.white),
|
||||
onPressed: _popWithPosition,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user