gpt4 book ai didi

flutter - 如何使用 bloc 在 flutter 中导航

转载 作者:IT王子 更新时间:2023-10-29 07:12:28 28 4
gpt4 key购买 nike

我有一个登录/注册页面。当用户注册时,我调用我的 bloc 代码并进行 firebase 注册。现在,当我完成注册时,我希望将应用程序重定向到主页。我怎样才能控制来自 bloc 的导航流?

我尝试在 Material 应用程序的“主页”中使用 firebase authstatechanges 流,但这仅在应用程序首次启动时有效。在我已经加载注册页面后它不起作用。

我还创建了一个方法来监听当用户注册时更改的流 bool 值,但该方法没有收到任何更新。

class EventsBloc{

final FirebaseAuth firebaseAuth = FirebaseAuth.instance;

Sink<User> get doSignup => _signupController.sink;

final _signupController = StreamController<User>();

Stream<bool> get isLoading => _isLoadingSubject.stream;

final _isLoadingSubject = BehaviorSubject<bool>(seedValue: false);



EventsBloc()
{
_signupController.stream.listen((user){

_isLoadingSubject.add(true);
firebaseAuth.createUserWithEmailAndPassword(email: user.email, password: user.password).then((firebaseUser) {

_isLoadingSubject.add(false);
// I WANT TO NAVIGATE TO THE HOME PAGE HERE
Firestore.instance.collection('user').document()
.setData({ 'email': user.email, 'phone': user.phoneNumber, 'name': user.name });


});

});
}


}

最佳答案

我认为父级中的身份验证状态流 StreamBuilder应该管用?在我看来,那将是最好的方式。

一个选项是向您的 Bloc 添加一个新的流,例如 Stream<String> get doNavigate ,并在您希望小部件导航到某处时向其添加事件。您可以将导航操作视为来自您的 Bloc 的另一个输出流。

另一种选择是扩大 isLoading 的范围也包括登录状态等信息。您可以拥有一个包含所有可能状态的枚举,例如:

enum Status { signedOut, loading, signedIn }

然后从您的 Bloc 公开它,而不仅仅是加载状态:

class EventBloc {
// ...
Stream<Status> get status => _statusSubject.stream;
final _statusSubject = BehaviorSubject<Status>(seedValue: Status.signedOut);

EventsBloc() {
_signupController.stream.listen((user) async {
_statusSubject.add(Status.loading);
final firebaseUser = await firebaseAuth.createUserWithEmailAndPassword(
email: user.email,
password: user.password,
);
Firestore.instance.collection('user').document().setData(
{'email': user.email, 'phone': user.phoneNumber, 'name': user.name});
_statusSubject.add(Status.signedIn);
});
}
}```

关于flutter - 如何使用 bloc 在 flutter 中导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54720135/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com