Flutter:如何设置 Stream 和 Provider

Posted

技术标签:

【中文标题】Flutter:如何设置 Stream 和 Provider【英文标题】:Flutter: How to set up Stream and Provider 【发布时间】:2021-05-14 06:39:54 【问题描述】:

我正在制作一个使用 Firebase 匿名登录的 Flutter 应用(稍后我将添加其他登录方法)。我想创建 Stream 和 Provider,这样如果用户点击 Login 按钮,它会将用户带到 Home(),如果用户点击 Home() 内的 Logout 按钮,它会将其带到 Login() 页面。

我还想为应用程序重新启动执行此操作,例如当用户之前登录时,用户应该被直接带到 Home() 页面而不是 Login()。

我对这一切都有非常基本的了解。在这里,我正在关注 FlutterFire 文档。 https://firebase.flutter.dev/docs/auth/usage/#authentication-state 在这个链接中,他们谈到了 Stream 等等,但我没有得到。

这是我的代码:

ma​​in.dart

void main() async 
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());


class MyApp extends StatelessWidget 
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      home: Wrapper(),
    );
  

wrapper.dart

class Wrapper extends StatefulWidget 
  @override
  _WrapperState createState() => _WrapperState();


class _WrapperState extends State<Wrapper> 
  final FirebaseAuth _auth = FirebaseAuth.instance;
  @override
  Widget build(BuildContext context) 
    _auth.authStateChanges().listen((User user) 
      if (user == null) 
        print('the user is currently signed out');
        return Authenticate();
       else 
        print('The User is currently signed In');
        return Home();
      
    );
  

AuthService

import 'package:firebase_auth/firebase_auth.dart';

class AuthenticationService 
  final FirebaseAuth _auth = FirebaseAuth.instance;

  //sign in anonympusly
  Future signinanon() async 
    try 
      UserCredential result = await _auth.signInAnonymously();
      User userdetails = result.user;
      return userdetails;
     catch (e) 
      print(e.toString());
      return null;
    
  

【问题讨论】:

【参考方案1】:

这里有很多选项,但为简单起见,您可以使用StreamBuilder,并根据身份验证状态显示不同的小部件或页面。

authStateChanges 在这里很好,因为我quote:

Firebase 身份验证使您能够通过流实时订阅此状态。调用后,该流会提供用户当前身份验证状态的立即事件,然后在身份验证状态更改时提供后续事件。

我强调。

【讨论】:

以上是关于Flutter:如何设置 Stream 和 Provider的主要内容,如果未能解决你的问题,请参考以下文章

Flutter状态管理——单Stream和广播Stream

Flutter状态管理——单Stream和广播Stream

Flutter状态管理——单Stream和广播Stream

Flutter 中的 Sink 和 Stream 有啥区别?

如何在 Flutter 中基于 Future 结果构建 Stream?

从 Stream (Flutter) 控制轮播滑块