![](/img/trans.png)
[英]How to modify Flutter Firebase Stream listener based on Firebase Auth stream when using Provider for DI?
[英]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.