How can I make my app not play abnormally?I need one person to look my code.My code mabye is not being disposed in corret

Viewed 16

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 .

0 Answers
Related