I need one person to look my code.My code mabye is not being disposed in corret. My app always play abnormally after it run about 20 minutes. I guess maybe my code is not writing in a good way.Can you help me?I have thought about 3 days.I can't find a way to solve my problem. These are my code. example.main:
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'dart:async';
import 'dart:math';
var speedX=5.0;//double 范围>0.25,<5.0
var voice = 1.0;//double范围0.0-1.0
int model = 2;
void main(){
runApp(start());
}
class start extends StatefulWidget {
const start({Key? key}) : super(key: key);
@override
State<start> createState() => _startState();
}
class _startState extends State<start> {
var _current=0;
var delta=0;
late Duration duration;
bool _loop=false;
List<String> url = [
// 'https://dow.dowlz5.com/20220512/5413_d82edd71/%E9%9C%8D%E6%AF%94%E7%89%B9%E4%BA%BA1%EF%BC%9A%E6%84%8F%E5%A4%96%E6%97%85%E7%A8%8B.The.Hobbit.An.Unexpected.Journey.2012.mp4',
// 'https://dow.dowlz10.com/20220830/2340_56228f45/xsbyj.mp4'
'assets/no0.mp4',
'assets/no2.mp4',
'assets/no1.mp4',
// 'assets/no2.mp4'
];
late List<VideoPlayerController> _controllers =[];
randomX(min, max) {
//nextInt 方法生成一个从 0(包括)到 max(不包括)的非负随机整数
var x = Random().nextInt(max) + min;
//如果您不想返回整数,只需删除 floor() 方法
return x.floor();
}
void playSpeed(double speedX){
if(speedX<0&&speedX==null){
speedX=1.0;
}else{
_controllers[_current].setPlaybackSpeed(speedX);
_controllers[_current].setVolume(voice);
// print("开始调整");
// print(_controllers[_current].value.duration.inMilliseconds);
// print(_controllers[_current].value.position.inMilliseconds);
}
}
_initUrlList(){
for(int i =0;i<url.length;i++){
_controllers.add(VideoPlayerController.asset(url[i]));
}
}
_initControllers(){
_controllers[_current].initialize();
_controllers[_current].play();
_controllers[_current].value.copyWith(isBuffering: true, isLooping:_loop);
playSpeed(speedX);
setState((){
_current = _current;
});
}
@override
void initState() {
super.initState();
// this.tick();
// if(_controllers[_current].value != null) {
// delta = (_controllers[_current].value.duration.inMilliseconds - _controllers[_current].value.position.inMilliseconds);
// }
_initUrlList();
_initControllers();
new Timer.periodic(Duration(milliseconds: 800), (Timer t) {
switch(model){
case 1://顺序播放,播放到最后一个停止
if(_loop){
_loop=false;}
if(_controllers[_current].value.duration.inMilliseconds==_controllers[_current].value.position.inMilliseconds&&_controllers[_current].value.position.inMilliseconds>0&&_controllers[_current].value.duration.inMilliseconds>0){
_current +=1;
this._initControllers();
}
break;
case 2://随机播放
if(_loop){
_loop=false;}
if(_controllers[_current].value.duration.inMilliseconds==_controllers[_current].value.position.inMilliseconds&&_controllers[_current].value.position.inMilliseconds>0&&_controllers[_current].value.duration.inMilliseconds>0){
_current =randomX(0, url.length);
this._initControllers();
}
break;
case 3://单曲循环
if(!_loop){
_loop=false;}
if(_controllers[_current].value.duration.inMilliseconds==_controllers[_current].value.position.inMilliseconds&&_controllers[_current].value.position.inMilliseconds>0&&_controllers[_current].value.duration.inMilliseconds>0){
this._initControllers();
}
break;
case 4://顺序循环
if(_loop){
_loop=false;}
if(_controllers[_current].value.duration.inMilliseconds==_controllers[_current].value.position.inMilliseconds&&_controllers[_current].value.position.inMilliseconds>0&&_controllers[_current].value.duration.inMilliseconds>0){
_current +=1;
if(_current>=url.length){
_current=0;
}
if(!_controllers[_current].value.isPlaying){
_controllers[_current].play();
}
this._initControllers();
}
break;
}
// if(delta < 100) {
// _current += 1;
// this._initControllers();
// }
});
// controller = VideoPlayerController.asset('assets/no1.mp4');
// controller.initialize();
// controller.play();
}
@override
void dispose() {
_controllers[_current].dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Hello video'),),
body:Container(
color: Colors.black,
child:VideoPlayer(_controllers[_current]),
),
),
);
}
}
yaml:
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
video_player: ^2.4.7
And I not get one right error .