【发布时间】:2018-11-20 09:38:13
【问题描述】:
我正在尝试从 Firebase 的 FireStore 数据库中读取数据并在 Flutter 应用中显示为列表。
我遇到了这个问题,我需要将 StreamBuilder 作为 Widget Array 的一部分。如果 StreamBuilder 小部件是小部件的单个子级,则它可以正常呈现。但如果是子小部件数组的一部分,它就不起作用。例如
下面是我使用 StreamBuilder
的 WidgetWidget 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 只有一个“子”元素。
但是,如果我使用另一个可以有多个孩子的小部件,例如行,StreamBuilder 不会渲染。例如
return new Scaffold(
body: new Row(
children: <Widget>[postsListWidget],
)
以上代码不会渲染 StreamBuilder Widget。
我在调试窗口中收到以下错误
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.
如果有人可以提供帮助,我将不胜感激,我只是找不到谷歌来帮助解决这个问题!
【问题讨论】:
-
Widget postsListWidget = new StreamBuilder(看起来很可疑。你在用postsListWidget做什么? -
我正在尝试从 firebase FireStore 数据库中获取流并显示在列表中。由于它不在 Row->Children Array 下工作,我为来自数据库的帖子创建了一个单独的小部件,即 postsListWidget !
标签: dart google-cloud-firestore flutter