【Flutter】슈퍼 편리한 동영상(video) 재생 위젯 Chewie
개요
Flutter로 동영상 플레이어를 구현하고 싶을 때 구구는 먼저 나오는 것이 video_player 플러그인이라고 생각합니다. ( htps // 푸 b. V / Pac 가게 s / )
이쪽에서도 구현은 가능합니다만, 재생이나 정지, 인디게이터의 표시등도 Controller를 이용해 스스로 관리하지 않으면 안되기 때문에 조금 귀찮습니다. 그래서, 이것들을 자동적으로 구성해 주는 chewie 위젯이라고 하는 것을 소개하고 싶습니다. 그건 그렇고, video_player와 완전히 별개가 아니며 chewie도 video_player를 기반으로합니다. ( htps // 푸 b. V / Pac 카게 s / 치우 우에 )
그건 그렇고, 왜 chewie (츄잉 껌)인지 모르겠습니다 (웃음)
 전제 조건
[✓] Flutter (Channel stable, 1.22.2, on Mac OS X 10.15.7 19H2, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 12.0.1)
[✓] Android Studio (version 4.0)
[✓] Connected device (1 available)
• No issues found!
 절차
 0.완성형
간단하게 화면 중앙에 비디오 플레이어를 배치하는 화면을 만들어갑니다.
동영상 소스는 github에 게시된 동영상을 사용합니다.
 
 1. 패키지 도입
pubspec.yaml에 chewie 및 video_player 패키지를 추가합니다.
기사 작성시(2020년 10월 27일) 시점의 chewie의 최신판은 0.9.10입니다만, 의존관계가 되고 있는 video_player는 0.10.0까지 밖에 대응하고 있기 때문에 일단은 이하의 버젼으로 합니다 생강.
pubspec.yamldependencies:
  flutter:
    sdk: flutter
  chewie: ^0.9.10
  video_player: ^0.10.0
작성하면 Pub get을 실행.
 2. 패키지 가져오기
다음 세 가지를 가져옵니다.
main.dartimport 'package:chewie/chewie.dart';
import 'package:chewie/src/chewie_player.dart';
import 'package:video_player/video_player.dart';
 3.컨트롤러 모두
개요에서 언급했듯이 ChewieController는 VideoPlayerController와 종속성이 있으므로 State 클래스 내에서 VideoPlayerController와 ChewieController를 모두 초기화합니다.
main.dartclass _MyHomePageState extends State<MyHomePage> {
//コントローラーの定義
  VideoPlayerController _videoPlayerController;
  ChewieController _chewieController;
//初期化
  @override
  void initState() {
    super.initState();
    _videoPlayerController = VideoPlayerController.network(
        'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4');
    _chewieController = ChewieController(
      videoPlayerController: _videoPlayerController,
      aspectRatio: 3 / 2,  //アスペクト比
      autoPlay: false,  //自動再生
      looping: true,  //繰り返し再生
      // 以下はオプション(なくてもOK)
      showControls: false,  //コントロールバーの表示(デフォルトではtrue)
      materialProgressColors: ChewieProgressColors(
        playedColor: Colors.red,  //再生済み部分(左側)の色
        handleColor: Colors.blue,  //再生地点を示すハンドルの色
        backgroundColor: Colors.grey,  //再生前のプログレスバーの色
        bufferedColor: Colors.lightGreen,  //未再生部分(右側)の色
      ),
      placeholder: Container(
        color: Colors.grey,  //動画読み込み前の背景色
      ),
      autoInitialize: true,  //widget呼び出し時に動画を読み込むかどうか
    );
  }
//コントローラーの破棄
  @override
  void dispose() {
    _videoPlayerController.dispose();
    _chewieController.dispose();
    super.dispose();
  }
//・・・
 4. 화면 표시
매우 간단하네요!
main.dart
child: Chewie(
   controller: _chewieController,
),
 5. 소스 코드 전체
전체 코드는 다음과 같습니다.
main.dart
import 'package:flutter/material.dart';
import 'package:chewie/chewie.dart';
import 'package:chewie/src/chewie_player.dart';
import 'package:video_player/video_player.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Chewie Sample',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Chewie Sample'),
    );
  }
}
class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
  VideoPlayerController _videoPlayerController;
  ChewieController _chewieController;
  @override
  void initState() {
    super.initState();
    _videoPlayerController = VideoPlayerController.network(
        'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4');
    _chewieController = ChewieController(
      videoPlayerController: _videoPlayerController,
      aspectRatio: 3 / 2,
      autoPlay: false,
      looping: true,
      // Try playing around with some of these other options:
      //showControls: false,
      materialProgressColors: ChewieProgressColors(
        playedColor: Colors.red,
        handleColor: Colors.blue,
        backgroundColor: Colors.grey,
        bufferedColor: Colors.lightGreen,
      ),
      placeholder: Container(
        color: Colors.grey,
      ),
      autoInitialize: true,
    );
  }
  @override
  void dispose() {
    _videoPlayerController.dispose();
    _chewieController.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Expanded(
              child: Center(
                child: Chewie(
                  controller: _chewieController,
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
 주의
현재 iOS 에뮬레이터에서는 제대로 작동하지 않는 것 같습니다. 실제로 시도했을 때 Controller를 정의하고 있음에도 불구하고,
controller != null, 'You must provide a chewie controller'
같은 오류가 표시됩니다. Android 에뮬레이터나 실제 기기(iOS 포함)에서는 정상적으로 동작하므로 그곳에서 시도해 보세요.
 사이고에게
video_player만이라면, 상태의 관리가 번거로운 곳을 chewie가 좋은 느낌에 전부 해 줍니다. 여러가지 스스로 커스터마이즈하고 싶을 때는 video_player가 좋을까 생각합니다만, 우선 동영상을 보면 좋다! 그렇다면 chewie로 충분하다고 생각합니다.
Flutter는 아직 일본어 정보가 적기 때문에 앞으로도 유용한 정보를 발신할 수 있으면 좋겠습니다!
 참고 사이트
 htps // 푸 b. V / Pac 가게 s /
 htps // 푸 b. V / Pac 카게 s / 치우 우에
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(【Flutter】슈퍼 편리한 동영상(video) 재생 위젯 Chewie), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/enhrs/items/5c90daf18dd33496ac95
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
[✓] Flutter (Channel stable, 1.22.2, on Mac OS X 10.15.7 19H2, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 12.0.1)
[✓] Android Studio (version 4.0)
[✓] Connected device (1 available)
• No issues found!
절차
 0.완성형
간단하게 화면 중앙에 비디오 플레이어를 배치하는 화면을 만들어갑니다.
동영상 소스는 github에 게시된 동영상을 사용합니다.
 
 1. 패키지 도입
pubspec.yaml에 chewie 및 video_player 패키지를 추가합니다.
기사 작성시(2020년 10월 27일) 시점의 chewie의 최신판은 0.9.10입니다만, 의존관계가 되고 있는 video_player는 0.10.0까지 밖에 대응하고 있기 때문에 일단은 이하의 버젼으로 합니다 생강.
pubspec.yamldependencies:
  flutter:
    sdk: flutter
  chewie: ^0.9.10
  video_player: ^0.10.0
작성하면 Pub get을 실행.
 2. 패키지 가져오기
다음 세 가지를 가져옵니다.
main.dartimport 'package:chewie/chewie.dart';
import 'package:chewie/src/chewie_player.dart';
import 'package:video_player/video_player.dart';
 3.컨트롤러 모두
개요에서 언급했듯이 ChewieController는 VideoPlayerController와 종속성이 있으므로 State 클래스 내에서 VideoPlayerController와 ChewieController를 모두 초기화합니다.
main.dartclass _MyHomePageState extends State<MyHomePage> {
//コントローラーの定義
  VideoPlayerController _videoPlayerController;
  ChewieController _chewieController;
//初期化
  @override
  void initState() {
    super.initState();
    _videoPlayerController = VideoPlayerController.network(
        'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4');
    _chewieController = ChewieController(
      videoPlayerController: _videoPlayerController,
      aspectRatio: 3 / 2,  //アスペクト比
      autoPlay: false,  //自動再生
      looping: true,  //繰り返し再生
      // 以下はオプション(なくてもOK)
      showControls: false,  //コントロールバーの表示(デフォルトではtrue)
      materialProgressColors: ChewieProgressColors(
        playedColor: Colors.red,  //再生済み部分(左側)の色
        handleColor: Colors.blue,  //再生地点を示すハンドルの色
        backgroundColor: Colors.grey,  //再生前のプログレスバーの色
        bufferedColor: Colors.lightGreen,  //未再生部分(右側)の色
      ),
      placeholder: Container(
        color: Colors.grey,  //動画読み込み前の背景色
      ),
      autoInitialize: true,  //widget呼び出し時に動画を読み込むかどうか
    );
  }
//コントローラーの破棄
  @override
  void dispose() {
    _videoPlayerController.dispose();
    _chewieController.dispose();
    super.dispose();
  }
//・・・
 4. 화면 표시
매우 간단하네요!
main.dart
child: Chewie(
   controller: _chewieController,
),
 5. 소스 코드 전체
전체 코드는 다음과 같습니다.
main.dart
import 'package:flutter/material.dart';
import 'package:chewie/chewie.dart';
import 'package:chewie/src/chewie_player.dart';
import 'package:video_player/video_player.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Chewie Sample',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Chewie Sample'),
    );
  }
}
class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
  VideoPlayerController _videoPlayerController;
  ChewieController _chewieController;
  @override
  void initState() {
    super.initState();
    _videoPlayerController = VideoPlayerController.network(
        'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4');
    _chewieController = ChewieController(
      videoPlayerController: _videoPlayerController,
      aspectRatio: 3 / 2,
      autoPlay: false,
      looping: true,
      // Try playing around with some of these other options:
      //showControls: false,
      materialProgressColors: ChewieProgressColors(
        playedColor: Colors.red,
        handleColor: Colors.blue,
        backgroundColor: Colors.grey,
        bufferedColor: Colors.lightGreen,
      ),
      placeholder: Container(
        color: Colors.grey,
      ),
      autoInitialize: true,
    );
  }
  @override
  void dispose() {
    _videoPlayerController.dispose();
    _chewieController.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Expanded(
              child: Center(
                child: Chewie(
                  controller: _chewieController,
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
 주의
현재 iOS 에뮬레이터에서는 제대로 작동하지 않는 것 같습니다. 실제로 시도했을 때 Controller를 정의하고 있음에도 불구하고,
controller != null, 'You must provide a chewie controller'
같은 오류가 표시됩니다. Android 에뮬레이터나 실제 기기(iOS 포함)에서는 정상적으로 동작하므로 그곳에서 시도해 보세요.
 사이고에게
video_player만이라면, 상태의 관리가 번거로운 곳을 chewie가 좋은 느낌에 전부 해 줍니다. 여러가지 스스로 커스터마이즈하고 싶을 때는 video_player가 좋을까 생각합니다만, 우선 동영상을 보면 좋다! 그렇다면 chewie로 충분하다고 생각합니다.
Flutter는 아직 일본어 정보가 적기 때문에 앞으로도 유용한 정보를 발신할 수 있으면 좋겠습니다!
 참고 사이트
 htps // 푸 b. V / Pac 가게 s /
 htps // 푸 b. V / Pac 카게 s / 치우 우에
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(【Flutter】슈퍼 편리한 동영상(video) 재생 위젯 Chewie), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/enhrs/items/5c90daf18dd33496ac95
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
dependencies:
  flutter:
    sdk: flutter
  chewie: ^0.9.10
  video_player: ^0.10.0
import 'package:chewie/chewie.dart';
import 'package:chewie/src/chewie_player.dart';
import 'package:video_player/video_player.dart';
class _MyHomePageState extends State<MyHomePage> {
//コントローラーの定義
  VideoPlayerController _videoPlayerController;
  ChewieController _chewieController;
//初期化
  @override
  void initState() {
    super.initState();
    _videoPlayerController = VideoPlayerController.network(
        'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4');
    _chewieController = ChewieController(
      videoPlayerController: _videoPlayerController,
      aspectRatio: 3 / 2,  //アスペクト比
      autoPlay: false,  //自動再生
      looping: true,  //繰り返し再生
      // 以下はオプション(なくてもOK)
      showControls: false,  //コントロールバーの表示(デフォルトではtrue)
      materialProgressColors: ChewieProgressColors(
        playedColor: Colors.red,  //再生済み部分(左側)の色
        handleColor: Colors.blue,  //再生地点を示すハンドルの色
        backgroundColor: Colors.grey,  //再生前のプログレスバーの色
        bufferedColor: Colors.lightGreen,  //未再生部分(右側)の色
      ),
      placeholder: Container(
        color: Colors.grey,  //動画読み込み前の背景色
      ),
      autoInitialize: true,  //widget呼び出し時に動画を読み込むかどうか
    );
  }
//コントローラーの破棄
  @override
  void dispose() {
    _videoPlayerController.dispose();
    _chewieController.dispose();
    super.dispose();
  }
//・・・
child: Chewie(
   controller: _chewieController,
),
import 'package:flutter/material.dart';
import 'package:chewie/chewie.dart';
import 'package:chewie/src/chewie_player.dart';
import 'package:video_player/video_player.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Chewie Sample',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Chewie Sample'),
    );
  }
}
class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
  VideoPlayerController _videoPlayerController;
  ChewieController _chewieController;
  @override
  void initState() {
    super.initState();
    _videoPlayerController = VideoPlayerController.network(
        'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4');
    _chewieController = ChewieController(
      videoPlayerController: _videoPlayerController,
      aspectRatio: 3 / 2,
      autoPlay: false,
      looping: true,
      // Try playing around with some of these other options:
      //showControls: false,
      materialProgressColors: ChewieProgressColors(
        playedColor: Colors.red,
        handleColor: Colors.blue,
        backgroundColor: Colors.grey,
        bufferedColor: Colors.lightGreen,
      ),
      placeholder: Container(
        color: Colors.grey,
      ),
      autoInitialize: true,
    );
  }
  @override
  void dispose() {
    _videoPlayerController.dispose();
    _chewieController.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Expanded(
              child: Center(
                child: Chewie(
                  controller: _chewieController,
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
video_player만이라면, 상태의 관리가 번거로운 곳을 chewie가 좋은 느낌에 전부 해 줍니다. 여러가지 스스로 커스터마이즈하고 싶을 때는 video_player가 좋을까 생각합니다만, 우선 동영상을 보면 좋다! 그렇다면 chewie로 충분하다고 생각합니다.
Flutter는 아직 일본어 정보가 적기 때문에 앞으로도 유용한 정보를 발신할 수 있으면 좋겠습니다!
참고 사이트
 htps // 푸 b. V / Pac 가게 s /
 htps // 푸 b. V / Pac 카게 s / 치우 우에
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(【Flutter】슈퍼 편리한 동영상(video) 재생 위젯 Chewie), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/enhrs/items/5c90daf18dd33496ac95
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
Reference
이 문제에 관하여(【Flutter】슈퍼 편리한 동영상(video) 재생 위젯 Chewie), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/enhrs/items/5c90daf18dd33496ac95텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)