Flutter: видеоплеер в ListView.builder (используется: Chewie) - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь создать видеоплеер в ListView.builder.Мои видео хранятся в Firestore.В ListView.builder при загрузке видео проблем нет, но всякий раз, когда вы прокручиваете страницу вверх и вниз, я получаю сообщение об ошибке в красном поле:

После удаления использовался VideoPlayerController.

I / flutter: после того, как вы вызвали dispose () на VideoPlayerController, он больше не может использоваться.

Widget _modeApp(){
  return new ListView.builder(
      itemCount: dataApp.length,
      itemBuilder: (context,i){
        String _path = dataApp[i].url;
        _controllers.add(new TextEditingController());
        _focusNode.add(new FocusNode());
        return new Card(
          child: new Column(
              children: <Widget>[
                new Row(
                children: <Widget>[
                  new Container(
                    width: 50.0,
                    height: 50.0,
                    margin: const EdgeInsets.all(15.0),
                    decoration: new BoxDecoration(
                        border: new Border.all(color: Colors.black38),
                        shape: BoxShape.circle,
                        image: new DecorationImage(image: new NetworkImage(dataApp[i].aurl))
                    ),
                  ),
                  new Text(dataApp[i].name,style: new TextStyle(fontWeight: FontWeight.bold)),
                ],
              ),
                new Chewie(
                  VideoPlayerController.network(_path),
                    aspectRatio: 3 / 2,
                    autoPlay: false,
                    looping: false,
              ),
                new Container(
                margin: const EdgeInsets.only(left: 12.0,top: 12.0),
                child: new Row(
                  children: <Widget>[
                    new Icon(Icons.favorite_border,size: 27.0),
                    new Padding(padding: EdgeInsets.only(left: 15.0)),
                    new Icon(Icons.chat_bubble_outline,size: 27.0),
                    new Padding(padding: EdgeInsets.only(left: 15.0)),
                    new Icon(Icons.turned_in_not,size: 27.0),
                  ],
                ),
              ),
                new ListTile(
                title: new Text(dataApp[i].text,style: new TextStyle(fontWeight: FontWeight.bold),),
                subtitle:  new Text(dataApp[i].time),
              ),
                new ListTile(
                leading: new Container(
                  width: 50.0,
                  height: 50.0,
                  decoration: new BoxDecoration(
                    border: new Border.all(color: Colors.black38),
                    shape: BoxShape.circle,
                    image: widget.accountEmail == null
                        ? new DecorationImage(image: new NetworkImage("${widget.value.photoUrl}"))
                        : new DecorationImage(image: new NetworkImage("${widget.accountPhoto}")),
                  ),
                ),
                title: new EnsureVisibleWhenFocused(
                  focusNode: _focusNode[i],
                  child: new TextField(
                    focusNode: _focusNode[i],
                    controller: _controllers[i],
                    style: new TextStyle(
                        fontSize: 15.0,
                        color: Colors.black
                    ),
                    decoration: new InputDecoration(
                      border: InputBorder.none,
                      hintText: "Add a comment...",
                      hintStyle: new TextStyle(color: Colors.grey),
                    ),
                  ),
                ),
                trailing: new IconButton(
                    icon: new Icon(Icons.send, color: _controllers[i].text != "" ? Colors.blue : null), onPressed: _controllers[i].text != "" ? () => _showMessage(i) : null),
              ),
                new Padding(
                  padding: EdgeInsets.only(top: 13.0)),
            ],
          ),
        );}
      );
  }

1 Ответ

0 голосов
/ 13 сентября 2018

Вы не должны создавать контроллеры видеоплеера в методе сборки. Вы хотите создать контроллер вне метода сборки, чтобы он не перестраивался при прокрутке.

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