Мое видео называется несколько раз во флаттере - PullRequest
0 голосов
/ 09 апреля 2020

Я разрабатываю флаттер приложение с пакетом video_player. Но когда я смотрю на сетевой профилировщик в студии android, я вижу, что мое видео вызывается несколько раз. Как я могу это исправить? Он использует слишком много inte rnet соединение

Может быть, мне нужно позвонить в контроллер проигрывателя видео в другой момент?

посмотрите скриншот моего сетевого профилировщика в android studio

вот мой код, где я вызываю видеоплеер:

import 'package:domix_app/widget/left_toolbar.dart';
import 'package:domix_app/widget/video_description.dart';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'package:built_collection/built_collection.dart';
import 'package:domix_app/widget/videos.dart';
import 'package:domix_app/global.dart' as global;

class VideoDisplay extends StatefulWidget {

  final BuiltList<Video> videos;
  final int idx;
  final int pageNb;
  final int currentPageIndex;
  final bool isPaused;

  const VideoDisplay({Key key, this.pageNb, this.videos, this.idx, this.currentPageIndex, this.isPaused}) : super(key: key);

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

class VideoDisplayState extends State<VideoDisplay> with RouteAware {

  VideoPlayerController videoController;
  bool initialized = false;
  String description;
  bool pause = false;
  Duration duration;
  VoidCallback listener;  

  @override
  void initState() {
    print("Init ! ${widget.videos[widget.idx].url}");
    description = widget.videos[widget.idx].description;
    if (description == null) {
      print("No description");
      description = "";
    }
    listener = () {
      setState(() {});
    };
    videoController = VideoPlayerController.network(widget.video+s[widget.idx].url)
    ..addListener(listener)
    ..initialize().then((_) {
        videoController.setLooping(true);
        videoController.seekTo(Duration.zero);
      setState(() {});
    });
    pause = false;
    initialized = true;
    super.initState();
  }

  @override
  void deactivate() {
    videoController.removeListener(listener);
    super.deactivate();
  }

  @override
  void dispose() {
    print("Dispose ! ${widget.videos[widget.idx].url}");
    videoController.pause();
    videoController.dispose();
    super.dispose();
  }

  void controlPlayPause() {
    if (widget.idx == widget.currentPageIndex && !widget.isPaused 
    && initialized && !pause && widget.pageNb == global.pageNb) {
      videoController.play();
    } else if (widget.idx != widget.currentPageIndex) {
      if (videoController.value.duration != null)
        videoController.seekTo(Duration.zero);
      pause = false;
    } else {
      videoController.pause();
    }
  }

  @override
  Widget build(BuildContext context) {
    controlPlayPause();
    return GestureDetector(
        onTap: () {
          setState(() {
              if (videoController.value.isPlaying) {
                videoController.pause();
                pause = true;
              } else {
                videoController.play();
                pause = false;
              }
          });
        },
        child: Stack(
          alignment: Alignment.bottomCenter,
            children : <Widget> [
              SizedBox.expand(
                child: FittedBox(
                  fit: BoxFit.cover,
                  child: Image.network(widget.videos[widget.idx].miniature),
                ),
              ),
              Center(child: CircularProgressIndicator(backgroundColor: Colors.black,)),
              SizedBox.expand(
                child: FittedBox(
                  fit: BoxFit.cover,
                  child: SizedBox(
                    width: videoController.value.size?.width ?? 0,
                    height:  videoController.value.size?.height ?? 0,
                    child: VideoPlayer(videoController),
                  ),
                ),
              ),
              Row(
                mainAxisSize: MainAxisSize.max,
                crossAxisAlignment: CrossAxisAlignment.end,
                mainAxisAlignment: MainAxisAlignment.spaceAround,
                children: <Widget>[
                  VideoDescription(trackName:  widget.videos[widget.idx].trackName + " - " + widget.videos[widget.idx].producer, description: description),
                  ActionsToolbar(
                    nblike: widget.videos[widget.idx].social.like, 
                    nbshare: widget.videos[widget.idx].social.share, 
                    videoController: videoController, 
                    id: widget.videos[widget.idx].trackId, 
                    djCover: widget.videos[widget.idx].djCover
                  )
                ]
              ),
            ]
          )
      );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...