Dart 空状态页和导航器问题?

Dart 空状态页和导航器问题?,dart,flutter,future,flutter-navigation,Dart,Flutter,Future,Flutter Navigation,我想在flatter应用程序中实现,当新闻提要为空时 当提要中没有活动时,我想显示“无活动”。当数据库有数据时,我想将其从StreamBuilder加载到ListView.builder 我尝试通过以下方式实现: child: StreamBuilder( stream: collection.snapshots(), builder: (context, snapshot) { if(snapshot.hasData) { return ListView

我想在flatter应用程序中实现,当新闻提要为空时

当提要中没有活动时,我想显示“无活动”。当数据库有数据时,我想将其从
StreamBuilder
加载到
ListView.builder

我尝试通过以下方式实现:

child: StreamBuilder(
    stream: collection.snapshots(),
    builder: (context, snapshot) {

    if(snapshot.hasData) {
       return ListView.builder(
            itemBuilder: (context, index) =>
                build(context, snapshot.data.documents[index]),
            itemCount: snapshot.data.documents.length,
         );
      } else {
          return _emptyStateWidget();
      }
我必须在else语句中返回一些内容,因为有时快照将没有数据,所以会抛出错误,使小部件返回null

但这会导致小部件树出现问题。因为如果我以后尝试使用Navigator.push-in
build
Widget:

Widget build(BuildContext context, DocumentSnapshot document) {
…
FlatButton(
  onPressed: () async {

await function(document);

if(validated == true) {
await Navigator.push(context, new MaterialPageRoute(
    builder: (BuildContext context) =>
    new Screen(documentInfo: documentInfo)));
}
将引发以下错误:

查找停用小部件的祖先是不安全的。此时 小部件元素树的状态不再稳定。安全地 在dispose()方法中引用小部件的祖先,保存引用 通过调用 widget的didChangeDependencies()方法

有没有办法避免这种情况,这样就不会抛出错误

出于某种原因,如果我在等待
函数(文档)
之前调用
Navigator.push
,则不会抛出错误。但我不能允许这样做,因为它必须在函数中执行数据验证,并且只有在成功时才能导航

谢谢

更新:

经过更多的测试,我认为问题是由
StreamBuilder
引起的。每当它获得新事件时,它就会重新生成。因此,当调用
Navigator.push时,这会导致问题,并且它会获得新事件,所以请尝试重建


如何解决?是否可以从重建子体停止StreamBuilder?

,这是因为您正在尝试导航到其他地方,而小部件树仍在生成中

您应该移动
导航。例如,在
initState
中,将
推送到流侦听器

void initState() {
super.initState();
collection.snapshots.listen((data){

if(validated == true) {
   await Navigator.push(context, new MaterialPageRoute(
      builder: (BuildContext context) =>
      new Screen(documentInfo: documentInfo)));
  }
});

}

对于空状态,返回
newcontainer()
,这样它就不会给出任何错误。对于
onPressed
事件,请尝试将
导航放置在
itemsbuilder
内部,方法是将
documentInfo
保存在
var
或任何您想要的内容中。感谢回复!您的意思是将
导航。在
itemBuilder
中推送
?感谢您的回复!但
已验证
不是来自数据库。这是对从数据库中获取的数据执行操作的结果我在代码中找不到经过验证的
。但是
validated
bool
。我尝试使用流,但没有人认为可以在
bool
上使用流?我尝试使用您的方法,但看不到如何将您的流添加到我的
StreamBuilder
。如何做?