- 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/
我正在使用 Google Cloud Firestore 作为 Flutter 应用程序的后端。目前我正在使用 StreamProvider 从云 firestore 构建数据流。现在,我需要维护 2
我正在尝试使用 StreamProvider(来自 this awesome package),但我一直在努力让特定的流工作。 我创建了一个 StreamController,我用它通过它的 Sink
我从 StreamProvider 获取的数据不完整。 下一个最小的小部件树重现了我的问题:选项卡式屏幕上的 SreamProvider。 我的用户对象包含多个值(以及其他属性)的映射,我通过调用 f
目前,我们正在使用 Firebase 在我们的应用程序上实现简单的聊天。 我们使用 Riverpod 处理应用程序的启动和身份验证。 启动过程如下: @override Widget build(
我想知道是否有人可以告诉我如何实现 Flutter StreamProvider“catchError”属性? 下面的示例代码添加到: StreamProvider.value( initia
我是 flutter 的新手。我实现了这个示例应用程序以了解 SQLite 和提供程序状态管理。这是一个简单的任务管理系统。我使用 MOOR 来处理 SQLite 数据库。我遇到的问题是任务列表在添加
我使用 StreamProvider将图像提供给其他应用程序。一切正常,但有一种情况除外:当我尝试将多张图像共享到我的三星 S6 设备(Android 5.1.1)上的消息传递应用程序时,消息传递应用
StreamProvider.value 使用相同的值多次构建小部件。 StreamProvider.value( value: FirebaseAuth.instance.onAuthS
我有一个像这样的 StreamBuilder: StreamBuilder>( stream: myDatabase.authInfosDao.watch(),
我正在 Flutter 中开发一个应用程序(我还是个新手),但遇到以下错误: Error: Could not find the correct Provider> above this Exerci
我有两个流: Stream FirebaseAuth.instance.onAuthStateChanged Stream userService.streamUser(String uid) 我的
当我尝试在 firestore 中获取不存在的数据时,我遇到了 StreamProvider 的问题。 Stream streamCollectedItem(String id,int categor
我有一个实现 firebase 身份验证的 flutter 应用程序。关注this后教程我的 main.dart 文件如下所示: class MyApp extends StatelessWidget
我有一个实现 firebase 身份验证的 flutter 应用程序。关注this后教程我的 main.dart 文件如下所示: class MyApp extends StatelessWidget
我正在使用 Flutter 开发一个应用程序,我正在使用 Cloud Firestore。是否有任何理由更喜欢 StreamBuilder 之间的一个和 StreamProvider ? 最佳答案 有
我正在尝试设置一个个人资料类型页面,用户可以在其中查看他们的信息,最终我将添加功能,以便他们可以更改他们的数据。我正在使用 Provider 访问 Firebase 流 它返回当前用户的 UID(这工
我试图通过将简单的 FireStore auth Provider 示例迁移到 RiverPod 来了解 RiverPod。 这是我的身份验证服务: import 'package:firebase_
有时我想我得到了提供者的逻辑,然后我被难住了几个小时试图做下面的事情。 我需要从 Firestore 集合流中获取连接 ID 列表。简单。 但是,我需要将此连接 ID 的流列表提供给另一个 fires
我注意到自从我使用 StreamProvider 添加一个新的 Stream 以来,我的读取请求显着增加。 ,我设法通过删除流和没有重复请求来确认这一点。但我似乎无法追查为什么它重复。 注意:代码运行
我正在尝试根据 Firebase 的身份验证状态创建一个简单的导航,但出于某种原因Provider.of(context)始终返回 null 作为小部件构建方法中的第一个值。所以我的应用程序总是导航到
我是一名优秀的程序员,十分优秀!