1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-22 21:09:21 +00:00
comunicmobile/lib/ui/routes/video_player_route.dart

68 lines
1.7 KiB
Dart
Raw Normal View History

2021-03-11 19:31:06 +00:00
import 'package:chewie/chewie.dart';
import 'package:comunic/ui/widgets/async_screen_widget.dart';
import 'package:comunic/ui/widgets/comunic_back_button_widget.dart';
import 'package:comunic/utils/intl_utils.dart';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
/// Video player route
///
/// @author Pierre Hubert
class VideoPlayerRoute extends StatefulWidget {
final String url;
const VideoPlayerRoute({
Key? key,
required this.url,
2022-03-11 16:02:06 +00:00
}) : super(key: key);
2021-03-11 19:31:06 +00:00
@override
_VideoPlayerRouteState createState() => _VideoPlayerRouteState();
}
class _VideoPlayerRouteState extends State<VideoPlayerRoute> {
VideoPlayerController? _videoPlayerController;
ChewieController? _chewieController;
2021-03-11 19:31:06 +00:00
Future<void> _initialize() async {
_videoPlayerController = VideoPlayerController.network(widget.url);
await _videoPlayerController!.initialize();
2021-03-11 19:31:06 +00:00
_chewieController = ChewieController(
videoPlayerController: _videoPlayerController!,
2021-03-11 19:31:06 +00:00
looping: false,
allowFullScreen: true,
allowMuting: true,
allowedScreenSleep: false,
);
}
@override
void dispose() {
if (_videoPlayerController != null) _videoPlayerController!.dispose();
if (_chewieController != null) _chewieController!.dispose();
2021-03-11 19:31:06 +00:00
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: ComunicBackButton(),
title: Text("Video"),
),
body: _buildBody(),
);
}
Widget _buildBody() => AsyncScreenWidget(
onReload: _initialize,
onBuild: _showBody,
errorMessage: tr("Failed to initialize video!")!,
2021-03-11 19:31:06 +00:00
);
Widget _showBody() => Chewie(controller: _chewieController!);
2021-03-11 19:31:06 +00:00
}