joaopaulofcc

Untitled

Oct 29th, 2020
1,143
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.     // Aqui estou exibindo um vídeo como asset (o vídeo está nas pastas do
  30.     // projeto do app, ao instalar o vídeo vai junto). Coloquei o vídeo na pasta
  31.     // "video".
  32.     _controller = VideoPlayerController.asset(
  33.       'video/terra.mp4',
  34.     );
  35.     // Inicializa o controlador.
  36.     _initializeVideoPlayerFuture = _controller.initialize();
  37.     // Configura o vídeo para exibir em loop.
  38.     _controller.setLooping(true);
  39.     super.initState();
  40.   }
  41.  
  42.   @override
  43.   void dispose() {
  44.     // Libera recursos do controlador de vídeo.
  45.     _controller.dispose();
  46.     super.dispose();
  47.   }
  48.  
  49. // Constroi layout.
  50.   @override
  51.   Widget build(BuildContext context) {
  52.     return Scaffold(
  53.       appBar: AppBar(
  54.         title: Text('Butterfly Video'),
  55.       ),
  56.       // Usa um FutureBuilder para exibir o spinner, indicando que o vídeo
  57.       // está sendo carregado.
  58.       body: FutureBuilder(
  59.         future: _initializeVideoPlayerFuture,
  60.         builder: (context, snapshot) {
  61.           if (snapshot.connectionState == ConnectionState.done) {
  62.             // Se o controlador terminou a inicialização, usa os dados do vídeo
  63.             // para definir o aspect radio (4:3 ou 16:9).
  64.             return AspectRatio(
  65.               aspectRatio: _controller.value.aspectRatio,
  66.               // Chama o player para exibir no layout.
  67.               child: VideoPlayer(_controller),
  68.             );
  69.           } else {
  70.             //  Se o contrrolador ainda está carregando, mostra o spinner.
  71.             return Center(child: CircularProgressIndicator());
  72.           }
  73.         },
  74.       ),
  75.       floatingActionButton: FloatingActionButton(
  76.         onPressed: () {
  77.           // Controla o play/pause do vídeo.
  78.           setState(() {
  79.             // Se o vídeo está executado, pausa.
  80.             if (_controller.value.isPlaying) {
  81.               _controller.pause();
  82.             } else {
  83.               // Se o vídeo está pausado, continua a execução.
  84.               _controller.play();
  85.             }
  86.           });
  87.         },
  88.         // Exibie o ícone correto de acordo com a situação atual (play ou pause).
  89.         child: Icon(
  90.           _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
  91.         ),
  92.       ),
  93.     );
  94.   }
  95. }
  96.  
RAW Paste Data