使用视频播放器时,应用程序在其主线程上做过多的工作

时间:2019-07-26 11:08:34

标签: flutter flutter-layout

我是新手,想创建一个播放视频的简单视频列表应用。在此期间,我创建了一个使用chewie和视频播放器的简单flutter应用程序。这是代码:

import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'package:chewie/chewie.dart';
import 'package:flutter/services.dart';

void main() => runApp(VideoPlayerApp());

class VideoPlayerApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () => SystemChrome.setEnabledSystemUIOverlays([SystemUiOverlay.bottom]),
      child:MaterialApp(
        title: 'Video Player Demo',
        home: VideoPlayerPage(),
      )
    );
  }
}

class VideoPlayerPage extends StatelessWidget {
  VideoPlayerPage({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView(
        children: <Widget>[
          VideoPlayerPageItem( // <- THIS IS THE CAUSE!
            videoPlayerController: VideoPlayerController.network(
                "https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4",
            ),
            looping: true,
          ),
        ],
      ),
    );
  }
}

class VideoPlayerPageItem extends StatefulWidget {
  final VideoPlayerController videoPlayerController;
  final bool looping;
  VideoPlayerPageItem({
    Key key,
    @required this.videoPlayerController,
    this.looping,
  }) : super(key: key);

  @override
  _VideoPlayerPageItemState createState() => _VideoPlayerPageItemState();
}

class _VideoPlayerPageItemState extends State<VideoPlayerPageItem> {
  ChewieController _chewieController;

  @override
  void initState() {
    super.initState();

    _chewieController = ChewieController(
      videoPlayerController: widget.videoPlayerController,
      aspectRatio: 16 / 9,
      autoInitialize: true,
      looping: widget.looping,
      errorBuilder: (context, errorMessage) {
        return Center(
          child: Text(
            errorMessage,
            style: TextStyle(color: Colors.white),
          ),
        );
      }
    );
  }

  @override
  void dispose() {
    widget.videoPlayerController.dispose();
    _chewieController.dispose();

    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return AspectRatio(
      aspectRatio: 16 / 9,
      child: Chewie(
        controller: _chewieController,
      ),
    );
  }
}

然后我在物理Android设备上运行它,但由于某种原因,我陷入了这个错误。

  

I / Choreographer(12733):跳过了37帧!该应用程序可能在其主线程上做过多的工作。

我再次检查了代码,发现是造成此问题的视频播放器。

我的问题是,在这种情况下如何正确使用视频播放器?

0 个答案:

没有答案