Флаттер, ошибка «Поток уже прослушан» в GridView - PullRequest
0 голосов
/ 01 января 2019

Что я делаю, так это выбираю список мультфильмов и показываю их по GridView.Ниже код извлекает данные

Future<void> _getWebtoonData() async {
    var response;
    if(_daysReceivedResponse[_pressedButtonDayIndex]){
      response = _daysResponse[_pressedButtonDayIndex];
    } else {
      response= await http.get('https://comic.naver.com/webtoon/weekdayList.nhn?week='+_currentWebtoonAddress);
      _daysReceivedResponse[_pressedButtonDayIndex] = true;
      _daysResponse[_pressedButtonDayIndex] = response;
    }
    dom.Document document = parser.parse(response.body);
    final e1 = document.querySelectorAll('.img_list .thumb');
    final e2 = document.querySelectorAll('.img_list .desc');
    final e3 = document.querySelectorAll('.img_list .rating_type');

    List<List<String>> infoCollection = List<List<String>>();
    List<String> info = List<String>();

    for(int i=0; i<e1.length; i++){
      info.add(e1[i].getElementsByTagName('img')[0].attributes['src']);
      info.add(e1[i].getElementsByTagName('a')[0].attributes['title']);
      info.add(e2[i].getElementsByTagName('a')[0].innerHtml);
      info.add(e3[i].getElementsByTagName('strong')[0].innerHtml);
      infoCollection.add(info);
    }
    _controller.sink.add(infoCollection);
  }

И я показываю эти изображения, названия, исполнителей и оценку по GridView, как показано ниже

Widget _getWebtoonGridView() {
    return StreamBuilder(
      stream: _controller.stream.asBroadcastStream(),
      builder: (BuildContext context, AsyncSnapshot<List> snapshot){
        if(snapshot.hasError)
          print(snapshot.error);
        else if(snapshot.hasData){
          return GridView.count(
            crossAxisCount: 3,
            childAspectRatio: 0.6,
            children: List.generate(snapshot.data.length, (index){
              return _getWebtoonInfo(index, snapshot.data[index]);
            }),
          );
        }
        else if(snapshot.connectionState != ConnectionState.done)
          return Center(child: CircularProgressIndicator());
      },
    );
  }

Но ошибка «Поток уже прослушан»происходит постоянно, в чем проблема с моим StreamController ??

Как я могу это исправить?

StackTrace

I / флаттер (21411): ══╡ ИСКЛЮЧЕНИЕ, ПРОВЕДЕННОЕ БИБЛИОТЕКОЙ ВИДЖЕТОВ════════════════ I / flutter (21411): было сгенерировано следующее StateError, строение расширено (flex: 1): I / flutter (21411): плохое состояние: поток уже былслушал.I / flutter (21411): I / flutter (21411): когда было сгенерировано исключение, это был стек: I / flutter (21411): # 4
_StreamBuilderBaseState._subscribe (package: flutter / src / widgets / async.dart: 135: 37) I / flutter (21411): # 5 _StreamBuilderBaseState.initState (package: flutter / src / widgets / async.dart: 109: 5) I / flutter (21411): # 6
StatefulElement._firstBuild (пакет: flutter / src / widgets / framework.dart: 3830: 58) I / flutter (21411): # 7 ComponentElement.mount (пакет: flutter / src / widgets / framework.dart: 3696: 5) I / flutter(21411):

8 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart: 2950: 14) I / flutter

(21411): # 9 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 2753: 12)

Переменная StreamController

StreamController<List<List<String>>> _controller = StreamController<List<List<String>>>.broadcast();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...