Я разрабатываю флаттер приложение с пакетом 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
)
]
),
]
)
);
}
}