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 等等,但我没有得到。
这是我的代码:
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(),
);
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 中的 Sink 和 Stream 有啥区别?