簡體   English   中英

Flutter:如何設置 Stream 和提供程序

[英]Flutter: How to set up Stream and Provider

我正在制作一個 Flutter 應用程序,使用 Firebase 匿名登錄(稍后我將添加其他登錄方法)。 我想創建 Stream 和提供程序,以便如果用戶點擊登錄按鈕,它會將用戶帶到 Home(),如果用戶點擊 Home() 內的注銷按鈕,它會將其帶到 Login() 頁面。

我還想為應用程序重新啟動執行此操作,例如當用戶之前登錄時,用戶應該直接進入 Home() 頁面而不是 Login()。

我對這一切都有非常基本的了解。 在這里,我正在關注 FlutterFire 文檔。 https://firebase.flutter.dev/docs/auth/usage/#authentication-state在這個鏈接中,他們談到了 Stream 和所有但我沒有得到。

這是我的代碼:

main.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(),
    );
  }
}

包裝器.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();
      }
    });
  }
}

身份驗證服務

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;
    }
  }
}

這里有很多選項,但為簡單起見,您可以使用StreamBuilder並根據身份驗證 state 顯示不同的小部件或頁面。

authStateChanges在這里很好,因為,我引用

Firebase Auth 使您能夠通過 Stream 實時訂閱此 state。 一旦被調用,stream 會提供用戶當前身份驗證 state 的即時事件,然后在身份驗證 state 更改時提供后續事件。

由我強調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM