У меня 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)