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

2024-03-27

我想实施空状态页 https://material.io/design/communication/empty-states.html#content在 Flutter 应用程序中,当新闻源为空时。

当提要中没有活动时,我想显示‘没有活动’。当数据库有数据时,我想从StreamBuilder to 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 语句中返回一些内容,因为有时快照没有数据,因此会抛出 Widget 返回 null 的错误。

但这会导致小部件树出现问题。因为如果我尝试使用 Navigator.pushbuild稍后小部件:

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() 方法中引用小部件的祖先,保存引用 通过调用inheritFromWidgetOfExactType()到祖先 小部件的 didChangeDependency() 方法。

有没有办法避免这种情况,以免引发错误?

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

Thanks!

UPDATE:

经过更多测试后,我认为问题是由StreamBuilder。每当收到新事件时它都会重建。所以这会导致调用时出现问题Navigator.push它得到了新事件,所以尝试重建。

怎么解决?是否可以停止StreamBuilder从重建后代?


发生这种情况是因为您正在尝试导航到其他地方,而您的小部件树仍在构建中。

你应该移动Navigation.push到流侦听器,例如,在您的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)));
  }
});

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

空状态页面和导航器问题? 的相关文章

随机推荐

  • 如何使用 apply、map 或 applymap 查找 pandas dataframe 中的每一行和每一列数据类型?

    我有如图所示的数据框 我希望每行和列的数据类型都使用 apply map applymap 如何获取这个数据类型 有些列具有混合数据类型 如突出显示的 例如list 和 str 有些有 list 和 dict 示例 pandas 数据框 1
  • 有没有办法在参数替换后从 SqlCommand 获取完整的 sql 文本?

    我创建了一个带有包含参数的 SQL 查询的 SqlCommand 然后我将所有参数添加到类中 在将 SQL 查询发送到数据库之前 是否有一种简单的方法可以查看生成的 SQL 查询 这对于调试目的来说会很方便 例如 复制整个查询并在管理工作室
  • main.cpp:(.text+0x5f): 未定义的引用

    我尝试从 SDL 指南中编写一些练习 我这样编译 g o main main cpp I usr local include SDL2 L usr local lib lSDL2 我得到这个 tmp cci2rYNF o In functi
  • ASP.Net MVC:如何读取我的自定义声明值

    请参阅下面的代码 我知道通过这种方式我们可以将自定义数据添加到索赔中 但现在的问题是如何读回这些值 假设我想读回索赔价值电子邮件和电子邮件2请告诉我需要编写什么代码来读回索赔值电子邮件和电子邮件2 UserManager
  • 如何每秒运行一个 Runnable 来更新 UI

    我正在尝试在 kotlin android 中编写代码以每秒移动一个图像 但我无法使其工作 现在我正在使用Timer安排一个Timer Task每秒 但它没有按预期工作 这是我的代码 class Actvt Image
  • 使用 Google Pretify 显示 HTML

    为了让 Google Prettify 正确显示 HTML 代码示例 您应该替换所有 lt with lt 和所有的 gt with gt 如何仅使用 JavaScript 来自动化该过程 如果您将代码放入
  • 使用 Oracle SQL Developer 查询两个数据库

    有没有办法在 Oracle SQL Developer 中查询两个数据库 在单个查询中 我对 Oracle 不太熟悉 无论如何 除了标准的 CRUD 语法 我正在尝试从 SQL Server 表插入 Oracle 表 想做这样的事情 INS
  • 使用 CSS 显示徽标的正确方法是什么?

    我最近一直在学习CSS 我正在观看的教程系列说显示徽标图像的最佳方法是将文本包装在H1标签中 然后将该标签的CSS样式设置为背景图像 并带有文本缩进 99999 或类似的大数字 这看起来非常粗俗和不优雅 对于 SEO 目的来说 使用 CSS
  • 如何检查 NSString 是否包含数字值?

    我有一个从公式生成的字符串 但是我只想使用该字符串 只要它的所有字符都是数字 如果不是 我想做一些不同的事情 例如显示错误消息 我一直在环顾四周 但发现很难找到任何符合我想做的事情 我看过 NSScanner 但我不确定它是否检查整个字符串
  • 在python中将字节转换为文件对象

    我有一个小应用程序 它使用以下方式读取本地文件 open diefile path r as csv file open diefile path r as file and also uses linecache module 我需要将用
  • Angular2 查询参数订阅触发两次

    尝试处理 OAuth 登录场景 其中如果用户登陆页面authorization code在查询字符串中 我们处理令牌并继续or如果他们在没有该令牌的情况下登陆页面 我们会检查本地存储中是否存在现有令牌 确保其仍然有效 并根据其有效性重定向到
  • requestAccessToEntity iOS6-向后兼容性-EKEventStore

    遵循 iOS6 eventKit 和新的隐私设置 我使用以下代码 它在 iOS6 设备上运行得很好 不过 我希望相同的代码也适用于 iOS 5 x 的设备 并且我希望不要编写 相同的代码 两次 似乎是错误的 任何人都可以协助优雅的解决方案
  • 使用 Tailwind CSS 创建包含文本的水平线 (HR) 分隔线

    我想创建一个 hr 使用 Tailwind CSS 进行分隔 但我想在中间添加一些文本 而不是跨越整个页面宽度的水平线 例如 Continue 我在文档中找不到类似的内容 我怎样才能达到这个效果 如有必要 我可以将 HTML 更改为除 hr
  • spring,如何更改cglib命名策略

    当spring创建代理时 它使用带有默认命名策略的cglib 有什么办法可以改变命名策略吗 生成的类名与我使用的另一个框架冲突 好像是cglibclaims http cglib sourceforge net apidocs net sf
  • 在给定总数、部分数和最大被加数的情况下查找整数分区的数量

    我正在寻找总共 N 个整数分区的数量 其中多个部分为 S 最大部分恰好为 X 而无需枚举所有分区 例如 所有 100 的分区都有 10 个部分 最大部分为 42 我没有找到解决这个问题的定理或分区恒等式 我怀疑这是一个不平凡的问题 不容易从
  • FCM 获取 MismatchSenderId

    我有一个使用 Google FCM 发送推送通知的应用程序 当我向一组用户发送推送通知时 我得到的响应是MismatchSenderId对于其中一些人来说 尽管如此 所有用户都拥有完全相同的应用程序 如何某些用户获得成功响应 而其他用户获得
  • iphone如何通过Xcode拍照后进入图片库

    大家好 我正在实施以下代码来通过我的应用程序拍照 UIApplication sharedApplication keyWindow setRootViewController picker picker sourceType UIImag
  • 找不到模块 create-react-app/script/start.js

    我的程序结构发生了一些变化 由于其复杂性 我无法准确指出问题所在 自从我的应用程序崩溃并且不再工作以来 我尝试了不同的方法 例如删除节点模块包并重新安装它们 但仍然无法工作 每当我尝试跑步时npm 启动我收到以下错误 below is my
  • 使用密码保护关闭的工作簿

    我已经搜索过 但没有找到在关闭的工作簿上添加外部密码的方法 假设我已经关闭了名为 Sample xlm 的工作簿 并且我正在打开一个名为 Test xlm 的工作簿 是否有代码可以让我在 Sample xlsm 上设置密码 我的意思是外部密
  • 空状态页面和导航器问题?

    我想实施空状态页 https material io design communication empty states html content在 Flutter 应用程序中 当新闻源为空时 当提要中没有活动时 我想显示 没有活动 当数据