流构建器在导航后未更新

2024-03-08

我正在使用流生成器来检测用户是否登录。

 return StreamBuilder<User>(
        stream: AuthService().user,
        builder: (context, snapshot) {
          if (snapshot.hasData)
            return SectionWrapper();
          else
            return Authentication();
        });

这是我正在使用的流

 Stream<User> get user {
    return _auth.onAuthStateChanged.map(_userFromFirebaseUser);
  }
  //create user object based on firebase user
  User _userFromFirebaseUser(FirebaseUser user) {
    return user != null ? User(uid: user.uid, email: user.email) : null;
  }

在部分包装器中,有 2 个按钮可导航到应用程序的两个不同部分,当我在其中一个部分中使用注销方法时,流生成器不会更新,并且需要刷新才能更新状态。

我还尝试在部分包装器中放置一个按钮来注销,它可以工作并在导航到其中一个部分之前更新 UI。

这是sectionWrapper() 小部件树。

Column(
        children: <Widget>[
          CupertinoButton(
              child: Text('Donation & Selling Section'),
              onPressed: () {
                Navigator.pushReplacementNamed(
                    context, Section1.routeName,
                    arguments: user);
              }),
          CupertinoButton(
              child: Text('Bookstores Section'),
              onPressed: () {
                Navigator.pushReplacementNamed(
                    context, Section2.routeName);
              }),
          
          //works before navigation, does not work after navigation back here
          CupertinoButton(
              child: Text('Sign out'),
              onPressed: () async {
                await AuthService().signOut();
              }),
        ],
      ),

我还尝试将流提供程序与消费者一起使用,但最终遇到了同样的问题。

   class Wrapper extends StatelessWidget {
  static const String routeName = '/';

  @override
  Widget build(BuildContext context) {
    final user = Provider.of<User>(context);
    return user == null ? Authentication() : SectionWrapper();
  }
}

我用流提供程序包装了材料应用程序。

MultiProvider(
      providers: [
        StreamProvider<User>.value(value: AuthService().user),
//other providers
      ],
      child: MaterialApp(

您的条件未在子页面中进行测试。您应该在sectionWrapper()页面中调用Provider.of。

你是说:

  • 如果用户已登录,则构建sectionWrapper小部件
  • 如果用户未登录构建身份验证小部件。

这就是该构建方法的内容。一旦建立起来,您需要说出下一步要做什么。

例如。 在下一个屏幕上的小部件树上方,像您一样设置provider.of。然后,如果值发生变化,提供程序将强制重建该屏幕的构建方法。

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

流构建器在导航后未更新 的相关文章

随机推荐

  • 将列列表作为向量传递给 data.table 的 CJ

    我有以下代码 main cols lt c num let dt lt data table num 1 5 let letters 1 5 dt new dt lt dt CJ num num let let unique TRUE on
  • 如何防止 XNA 组件在离屏时绘制?

    我正在 XNA 中制作 2d 游戏 使用可绘制游戏组件时 哪一个性能更好 1 当组件不在屏幕上时 将其从组件列表中删除 当组件在屏幕上时 将其添加 2 当其离屏时 不运行其绘制函数 通过使用 awake 布尔字段和 if 语句围绕绘图函数中
  • 测量服务器请求后 JSF 视图的呈现时间

    我想测量 JSF 应用程序的渲染时间 由于我的权力原因 应用程序无法填充日志 因此 我的问题是 有什么方法可以在使用任何浏览器执行包括后端 服务器 调用的特定操作后测量应用程序的渲染时间 到目前为止 在使用 Chrome 开发者工具后 我发
  • 如何从QVariant获取原始python数据

    这几天正在学习python和Qt 所以请考虑这将是一个新手问题 但我被困在这里 import sys from PyQt4 QtCore import data1 string data2 QVariant data1 data3 data
  • DirectUI 的真相是什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个 Windows 桌面应用程序 它需要一个很棒的 UI 我现在使用Visual Studio和MFC 后来听说DirectU
  • 如何获取 MySQL 数据库的最后访问(和/或写入)时间?

    如何查明 MySQL 数据库上次读取或写入的时间 您甚至可以对每张桌子进行检查吗 SELECT UPDATE TIME FROM INFORMATION SCHEMA TABLES WHERE TABLE SCHEMA dbname AND
  • 托管和非托管 C++/MFC 可以混合在一个 dll 中吗?

    以前 我们有 MFC VC6 VB6 和 C 应用程序中的软件 需要调用用 C 和 MFC 编写的相同引擎 该引擎需要 C 来提高速度 当时我们决定使用 COM 作为接口 因为所有三个都可以使用它 并且在编组等方面的问题最少 我们的 MFC
  • 在 SQL Server 中存储图像?

    我制作了一个小型演示网站 并在其上将图像存储在 sql 服务器上的图像列中 我有几个问题是 这是一个坏主意吗 当我的网站增长时 它会影响性能吗 另一种方法是将图像存储在光盘上 并且仅将图像的引用存储在数据库中 这想必是很多人都曾遇到过的共同
  • 使用 docker-compose 将 Gitlab CI/CD 转至 Digital Ocean 以实现多个存储库

    目前我在 Gitlab 中有一个项目 repo 它是一个角度应用程序 我使用 Gitlab CI CD 来构建 测试 发布和部署 发布将构建一个新的 docker 镜像 将其推送到 Gitlab 注册表 然后将其部署到我的 Digital
  • 有人对以这种方式使用黑板模式有想法吗?

    有人对 实用程序员 第 165 页中的 Blackboard 概念有什么想法吗 我想要几个彼此独立的小子系统 DLL 和 EXE 有一些程序集将被所有 EXE 使用 这些程序集几乎都使用相同的数据库 Blackboard 类型模式不是使用接
  • 确定对不正确的 .NET Framework 版本的间接依赖的来源

    我想知道如何确定此构建错误的来源 Warning 4 The primary reference MyNamespace MyProject could not be resolved because it has an indirect
  • 仅当值不为空时 PHP/MYSQL 更新

    我正在构建一个表单来更新多列数据 这段代码对于我的目的来说已经部分成功 剩下要做的唯一一件事就是包含 如果 IS NOT NULL 更新查询 我不知道该怎么做 换句话说 我只希望在 POST 值不为空时执行 UPDATE
  • Magento 网站突然出现“未收到数据”错误代码:ERR_EMPTY_RESPONSE

    我们在电子商务网站上运行 Magento 最近几天似乎有些非常重要的页面根本无法加载 网站上的大部分页面加载良好 但是如果用户 登录 并且他们尝试访问购物车结帐页面 迄今为止最重要的页面 他们会收到下图所示的非常令人讨厌的消息 据我所知 最
  • 从 WebJob 中停止网站

    有什么方法可以阻止 WebJob 访问 Azure 网站吗 我有一个使用 Ghost 在 Node 上运行的 Azure 网站 我正在尝试安排 Ghost 数据库文件的备份 最好在站点未运行时进行备份 我可以通过使用 Kudu PowerS
  • 如何防止外部脚本使用break语句终止脚本

    我正在调用一个外部 ps1 文件 其中包含break某些错误情况下的语句 我想以某种方式捕获这种情况 允许任何外部打印的消息正常显示 并继续执行脚本中的后续语句 如果外部脚本有throw 这可以很好地使用try catch 即使trap在我
  • 如何将 ExpandableListView 放入 ScrollView 中而不使其折叠?

    我想在 ScrollView 中使用 ExpandableListView 与其他视图 但我在 ExpandableListView 中遇到了自滚动器的问题 我尝试禁用它 但问题在于 ExpandableListView 的高度及其内部布局
  • 如何在不使用任何库的情况下检测android中的IBeacon

    我是 Ibeacon 的新手 我想知道我们是否可以在不使用任何 SDKLibrary 或库的情况下检测 Android 中的 Ibeacon 任何人都可以给出示例 我知道一些像 Radius Networks 这样的库 但我不想使用任何图书
  • CSS min-width 不显示水平滚动条

    我建立了一个网站 并使用了最小宽度 css body overflow auto min width 1600px 但是当它以较小的分辨率加载时 它不会出现水平滚动条 我应该怎么做才能出现水平滚动条 您无需声明overflow如果您希望滚动
  • MKMapView 调用 didSelectAnnotationView

    I use MKMapView 在地图上我显示可点击AnnotationViews 点击后AnnotationView 我将 MyController 推送到NavigationController 在 MyController 中 我单击
  • 流构建器在导航后未更新

    我正在使用流生成器来检测用户是否登录 return StreamBuilder