joaopaulofcc

Untitled

Oct 29th, 2020
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 3.03 KB | None | 0 0
  1. // Importa bibliotecas
  2. import 'dart:async';
  3. import 'package:flutter/material.dart';
  4. import 'package:video_player/video_player.dart';
  5.  
  6. void main() => runApp(VideoPlayerApp());
  7.  
  8. class VideoPlayerApp extends StatelessWidget {
  9.   @override
  10.   Widget build(BuildContext context) {
  11.     return MaterialApp(
  12.       title: 'Video Player Demo',
  13.       home: VideoPlayerScreen(),
  14.     );
  15.   }
  16. }
  17.  
  18. class VideoPlayerScreen extends StatefulWidget {
  19.   VideoPlayerScreen({Key key}) : super(key: key);
  20.   @override
  21.   _VideoPlayerScreenState createState() => _VideoPlayerScreenState();
  22. }
  23.  
  24. class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  25.   VideoPlayerController _controller;
  26.   Future<void> _initializeVideoPlayerFuture;
  27.   @override
  28.   void initState() {
  29.     // Cria e armazena o controlador de video. Este controlador oferece diversas
  30.     // funções para exibição de vídeos (url, arquivos e assets).
  31.     _controller = VideoPlayerController.network(
  32.       'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4',
  33.     );
  34.     // Inicializa o controlador.
  35.     _initializeVideoPlayerFuture = _controller.initialize();
  36.     // Configura o vídeo para exibir em loop.
  37.     _controller.setLooping(true);
  38.     super.initState();
  39.   }
  40.  
  41.   @override
  42.   void dispose() {
  43.     // Libera recursos do controlador de vídeo.
  44.     _controller.dispose();
  45.     super.dispose();
  46.   }
  47.  
  48. // Constroi layout.
  49.   @override
  50.   Widget build(BuildContext context) {
  51.     return Scaffold(
  52.       appBar: AppBar(
  53.         title: Text('Butterfly Video'),
  54.       ),
  55.       // Usa um FutureBuilder para exibir o spinner, indicando que o vídeo
  56.       // está sendo carregado.
  57.       body: FutureBuilder(
  58.         future: _initializeVideoPlayerFuture,
  59.         builder: (context, snapshot) {
  60.           if (snapshot.connectionState == ConnectionState.done) {
  61.             // Se o controlador terminou a inicialização, usa os dados do vídeo
  62.             // para definir o aspect radio (4:3 ou 16:9).
  63.             return AspectRatio(
  64.               aspectRatio: _controller.value.aspectRatio,
  65.               // Chama o player para exibir no layout.
  66.               child: VideoPlayer(_controller),
  67.             );
  68.           } else {
  69.             //  Se o contrrolador ainda está carregando, mostra o spinner.
  70.             return Center(child: CircularProgressIndicator());
  71.           }
  72.         },
  73.       ),
  74.       floatingActionButton: FloatingActionButton(
  75.         onPressed: () {
  76.           // Controla o play/pause do vídeo.
  77.           setState(() {
  78.             // Se o vídeo está executado, pausa.
  79.             if (_controller.value.isPlaying) {
  80.               _controller.pause();
  81.             } else {
  82.               // Se o vídeo está pausado, continua a execução.
  83.               _controller.play();
  84.             }
  85.           });
  86.         },
  87.         // Exibie o ícone correto de acordo com a situação atual (play ou pause).
  88.         child: Icon(
  89.           _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
  90.         ),
  91.       ),
  92.     );
  93.   }
  94. }
  95.  
Add Comment
Please, Sign In to add comment