Виджет StreamBuilder не отображается, если вложен в дочерние элементы: <Widget>[] - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь прочитать данные из базы данных Firebase FireStore и отобразить их в виде списка в приложении флаттера.

Я столкнулся с этой проблемой, когда мне нужно сделать StreamBuilder частью массива виджетов.Если виджет StreamBuilder является единственным дочерним элементом виджета, он отображается нормально.Но если он является частью массива дочерних виджетов, он не работает.Например,

Ниже представлен мой виджет, который использует StreamBuilder

Widget postsListWidget = new StreamBuilder(
        stream: Firestore.instance.collection('baby').snapshots(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) return const Text('Loading...');
          return new ListView.builder(
            itemCount: snapshot.data.documents.length,
            padding: const EdgeInsets.only(top: 10.0),
            itemExtent: 55.0,
            itemBuilder: (context, index) =>
                _buildListItem(context, snapshot.data.documents[index]),
          );
        });

Здесь я использую виджет StreamBuilder с одним родительским дочерним элементом, например, Контейнер

return new Scaffold(
        body: new Container(
      child: postsListWidget,
    )

Приведенный выше код будет работать правильно, потому что Container имеет только один дочерний элемент.

Однако, если я использую другой виджет, который может иметь более одного дочернего элемента, например, Row, StreamBuilder не будет отображаться.например,

 return new Scaffold(
        body: new Row(
      children: <Widget>[postsListWidget],
    )

Приведенный выше код не отображает виджет StreamBuilder.

В моем окне отладки появляются следующие ошибки

flutter: Another exception was thrown: RenderBox was not laid out: RenderViewport#9162d NEEDS-LAYOUT NEEDS-PAINT
flutter: Another exception was thrown: RenderBox was not laid out: RenderViewport#9162d NEEDS-PAINT
flutter: Another exception was thrown: Tried to paint a RenderObject reentrantly.
flutter: Another exception was thrown: 'package:flutter/src/widgets/text.dart': Failed assertion: line 213 pos 15: 'data != null': is not true.
flutter: Another exception was thrown: Tried to paint a RenderObject reentrantly.

Буду признателен, если кто-томожет помочь, я просто не могу найти Google, чтобы помочь в этом !!

1 Ответ

0 голосов
/ 11 июня 2018

Я думаю, что вам не хватает проверок на наличие ошибок и данных, которые пока недоступны, как показано в

https://docs.flutter.io/flutter/widgets/StreamBuilder-class.html

new StreamBuilder<int>(
  stream: _lot?.bids, // a Stream<int> or null
  builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
    if (snapshot.hasError)
      return new Text('Error: ${snapshot.error}');
    switch (snapshot.connectionState) {
      case ConnectionState.none: return new Text('Select lot');
      case ConnectionState.waiting: return new Text('Awaiting bids...');
      case ConnectionState.active: return new Text('\$${snapshot.data}');
      case ConnectionState.done: return new Text('\$${snapshot.data} (closed)');
    }
  },
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...