- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个实现 firebase 身份验证的 flutter 应用程序。关注this后教程我的 main.dart 文件如下所示:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamProvider<User>.value(
catchError: (_, err) => null,
value: AuthService().user,
child: MaterialApp(
home: Wrapper(),
),
);
}
}
值:AuthService().user 由以下get 函数 作为流返回:
// auth change user stream
Stream<User> get user {
return _auth.onAuthStateChanged.map(
(FirebaseUser user) => _userFromFirebaseUser(user),
);
}
User _userFromFirebaseUser(FirebaseUser user) {
return user != null ? User(uid: user.uid) : null;
}
Wrapper() 小部件如下所示:
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
if (user == null) {
print("user is null, should show Authenticate()");
return Authenticate();
} else {
return Home();
}
}
}
此代码在以下情况下起作用:
但是,从 Home() 屏幕导航是这样布局的:
我在前进时使用 Navigator.push()(即从“SecondPage()”到“ThirdPage()”)。然后,我将第二页和第三页脚手架包装在 WillPopScope 中,其中 onWillPop 调用 Navigator.pushReplacement() 向后导航。
(注意:我这样做是因为这些页面从 firebase firestore 读取和写入数据,并且 Navigator.pop() 不会导致重新渲染。这意味着用户可能会更新某些内容ThirdPage() 更改了 firestore 中的值,但是当我随后调用 Navigator.pop() 时,它不会使用新数据更新 SecondPage()。)
我的问题是,当从 SecondPage() 导航到 Home() 页面时,有关 Navigator.pushReplacement() 的问题导致了问题,因此当用户随后注销时,屏幕不显示 Authenticate()页面。
我在 Wrapper() 中放置了一个 print("user is null, should show Authenticate()")
调用来验证 if (user == null)
在用户单击注销按钮时为 true。它确实打印了,但它仍然没有显示 Authenticate() 屏幕。
我知道它与 pushReplacement() 有关,因为直接从 Home() 注销而没有导航到任何地方功能正常(即显示 Authenticate() 页面)。感谢您的帮助。
最佳答案
我在学习相同的教程时遇到了同样的问题。就我而言,事实证明 signUp 按钮工作正常,但对于注销和登录,我需要刷新才能看到更改。在调试文件后,我得出了这个结论。
尽管流总是监听传入的数据,但它位于 Widget 构建方法内部,需要调用以获取另一个流。所以我只需要调用Wrapper()
方法,一旦我检测到非空用户值。所以我这样做了。
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context)=>
Wrapper()), (_) => false );
我在 signIn
页面中做了一个 if-else
语句,当用户返回非 null 时我调用了一次 Wrapper()
再次成功。
关于调用 pushReplacement 后 Flutter StreamProvider 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62756173/
我有一个页面推送另一个页面并等待返回/弹出的值进行处理。如果可能的话,我希望第二页能够委托(delegate)(让另一个页面返回值)。像这样: // page 1 Navigator.of(conte
我有一个带有自定义底部导航栏的主屏幕,当单击一个图标时,它将当前索引设置为被单击的图标。但是当点击索引号 2 时,它会整页路由到另一个页面以添加“帖子”。提交帖子后,pushReplacement 会
我有一个实现 firebase 身份验证的 flutter 应用程序。关注this后教程我的 main.dart 文件如下所示: class MyApp extends StatelessWidget
我有一个实现 firebase 身份验证的 flutter 应用程序。关注this后教程我的 main.dart 文件如下所示: class MyApp extends StatelessWidget
我尝试使用命名路由,但它似乎并没有给我一个错误“无法找到 _MaterialAppState 的路由生成器(“/homepage”,null)。我无法理解 namedRoutes 在这方面的工作案例。
我想知道是否有一种使用 Navigator 调用的方法不允许用户向后导航并保持 Hero Widget 的动画完好无损?我在启动画面和登录屏幕之间有一个英雄小部件图像转换,但我想阻止用户从启动画面返回
在flutter中,我们有两种方式可以在销毁当前页面的同时退出页面。第一个是pushReplacement- Navigator.pushReplacement(context, MaterialPa
使用命令式 api 无法完成基于页面的路由,而是向 Navigator.pages 提供一个没有相应页面的新列表。 'package:flutter/src/widgets/navigator.dar
我是一名优秀的程序员,十分优秀!