【问题标题】:Flutter: How to set up Stream and ProviderFlutter:如何设置 Stream 和 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;
    }
  }
}

【问题讨论】:

    标签: firebase flutter firebase-authentication


    【解决方案1】:

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

    authStateChanges 在这里很好,因为我quote

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

    我强调。

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 1970-01-01
      • 2020-11-01
      • 2021-10-31
      • 2020-11-03
      • 2020-09-18
      • 2020-11-15
      • 2020-10-16
      • 1970-01-01
      相关资源
      最近更新 更多