'youtube_player_flutter` не работает во флаттере - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть виджет PageView, и я хочу воспроизвести видео на YouTube на указанной странице c, и при прокрутке страницы должно начаться видео.

Для этого я использую youtube_player_flutter package.

ошибка:

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, java.lang.IllegalStateException: Trying to create an already created platform view, view id: 2

Иногда это работает, когда я перезагружаю виджет игрока, но большую часть времени я получаю эту ошибку.

код: -

class VideoPlayer extends StatefulWidget {
  @override
  _VideoPlayerState createState() => _VideoPlayerState();
}

class _VideoPlayerState extends State<VideoPlayer> {
  YoutubePlayerController _controller;
  bool _isPlayerReady = false;

  @override
  void initState() {
    super.initState();
    this._controller = YoutubePlayerController(
      initialVideoId: 'lgkZC_Ss6YE',
      flags: YoutubePlayerFlags(
        mute: false,
        autoPlay: true,
        disableDragSeek: true,
        loop: false,
        isLive: false,
        forceHideAnnotation: true,
        forceHD: false,
        enableCaption: true,
      ),
    )..addListener(_videoPlayerListner);
  }

  void _videoPlayerListner() {
    print(_controller.value.playerState.toString());
  }

  @override
  void deactivate() {
    _controller.pause();
    super.deactivate();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return YoutubePlayer(
      controller: _controller,
      showVideoProgressIndicator: true,
      progressIndicatorColor: Colors.blueAccent,
      topActions: <Widget>[
        SizedBox(width: 8.0),
        Expanded(
          child: Text(
            _controller.metadata.title,
            style: TextStyle(
              color: Colors.white,
              fontSize: 18.0,
            ),
            overflow: TextOverflow.ellipsis,
            maxLines: 1,
          ),
        ),
      ],
      onReady: () {
        _isPlayerReady = true;
      },
      onEnded: (data) {},
    );
  }
}

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 16 апреля 2020

В вашем _videoPlayerListner вы должны установитьState для _playerState следующим образом

void _videoPlayerListner () {
   if (_isPlayerReady) {
     setState(() {
       _playerState = _controller.value.playerState;
     });    
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...