Флаттер инициализирует видео в другом изоляте - PullRequest
0 голосов
/ 16 сентября 2018

У меня 4 видео, и я запускаю первое видео при запуске приложения. Во время воспроизведения первого видео я хочу инициализировать остальные три видео, чтобы оно воспроизводилось плавно. Я инициализировал все четыре видео в одном и том же изоляте, затем иногда пользовательский интерфейс зависает. Поэтому, чтобы избежать этого, я хочу инициализировать три других видео в другом изоляторе (не основном), чтобы пользовательский интерфейс не зависал. Я так и пытался.

Код:

  VideoPlayerController _firstController;
  VideoPlayerController _secondController;
  VideoPlayerController _thirdController;
  VideoPlayerController _fourthController;
  static List<VideoPlayerController> _controllers;
  List<String> urls = [url1, url2, url3, url4];

  @override
  void initState() {
     _controllers = [
      _firstController,
      _secondController,
      _thirdController,
      _fourthController,
    ];
    _initVideo();
    _initFirstThree();
    super.initState();
  }

 _initVideo() async {
    _controllers[0] = new VideoPlayerController.network(urls[0]);
    await _controllers[0].initialize();
    await _controllers[0].setLooping(true);
    await _controllers[0].play();
    setState(() {});
  }

 _initFirstThree() async {
    for (int i = 1; i < urls.length; i++) {
        await initializeVideo(i, urls[i]);
    }
  }

Future initializeVideo(int index, String url) async {
    final ReceivePort receivePort = ReceivePort();
    await Isolate.spawn(isolateInit, receivePort.sendPort);

    final SendPort sendPort = await receivePort.first;
    final VideoPlayerController result = await sendReceive(sendPort, url);

    _controllers[index] = result;
    await result.dispose(); 
  }

static isolateInit(SendPort sendPort) async {
    final ReceivePort receivePort = ReceivePort();
    sendPort.send(receivePort.sendPort);

    final msg = await receivePort.first;

      final String url = msg[0];
      final SendPort replyPort = msg[1];

      final VideoPlayerController controller = new VideoPlayerController.network(url);
      await controller.initialize();
      await controller.setLooping(true);

      replyPort.send(controller);

  }

  Future sendReceive(SendPort send, message) {
    final ReceivePort receivePort = ReceivePort();
    send.send([message, receivePort.sendPort]);
    return receivePort.first;
  }

Но после успешной инициализации первого видео исключение говорит о них.
Это ошибка флаттера или я что-то упустил?
Я борюсь с этим весь день, пожалуйста, помогите мне, любая помощь высоко ценится!

[VERBOSE-2: dart_isolate.cc (813)] Isolate (56689054) 'main.dart: isolateInit ()' завершился с ошибкой
[VERBOSE-2: shell.cc (181)] Ошибка дротика: необработанное исключение: NoSuchMethodError: метод 'addObserver' был вызван для нуля.
Получатель: ноль Пробный вызов: addObserver (экземпляр _VideoAppLifeCycleObserver) Object.noSuchMethod (dart: core / runtime / libobject_patch.dart: 48: 5)
_VideoAppLifeCycleObserver.initialize (пакет: video_player / video_player.dart: 398: 29)
VideoPlayerController.initialize (пакет: video_player / video_player.dart: 187: 24)
_SwiperScreenState. isolateInit (пакет: komama / video_swiper.dart: 115: 24) _startIsolate. (Дротика: изолировать / выполнения / libisolate_patch.dart: 292: 17) _RawReceivePortImpl._handleMessage (dart: isolate / runtime / libisolate_patch.dart: 171: 12)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...