use*_*830 2 flutter flutter-bloc freezed
我想使用 Firebase 设置身份验证。我有这个身份验证存储库,它具有获取当前用户的方法。
@override
Stream<User?> get user => _firebaseAuth.userChanges();
Run Code Online (Sandbox Code Playgroud)
在我的块内,我有这个构造函数。
class AuthBloc extends Bloc<AuthEvent, AuthState> {
final AuthRepository _authRepository;
late StreamSubscription<User?> _authSubscription;
AuthBloc(AuthRepository authRepository)
: _authRepository = authRepository,
super(const AuthState.initial()) {
on<AuthStarted>(_onUserChanged);
}
void _onUserChanged(AuthStarted event, Emitter<AuthState> emit) {
_authSubscription = _authRepository.user.listen((user) async {
if (user != null) {
emit(AuthState.authenticated(user));
} else {
const AuthState.unauthenticated();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
当我的应用程序启动时,我在我的主类上调用它。
BlocProvider<AuthBloc>(
create: (context) => AuthBloc(context.read<AuthRepository>())
..add(const AuthEvent.started()),
),
Run Code Online (Sandbox Code Playgroud)
这就是我的状态
part of 'auth_bloc.dart';
@freezed
class AuthState with _$AuthState {
const factory AuthState.initial() = _initial;
const factory AuthState.authenticated(User user) = _Authenticated;
const factory AuthState.unauthenticated() = _Unauthenticated;
}
Run Code Online (Sandbox Code Playgroud)
现在,我的用户界面上有这个,具体取决于我的应用程序的状态。我想呈现不同的观点。
return state.when(
initial: () => _buildInitial(context),
authenticated: (user) => _buildAuthenticated(),
unauthenticated: () => _buildUnauthenticated(),
);
Run Code Online (Sandbox Code Playgroud)
我的区块出现以下错误。
这里的这一行触发了错误。
我使用冻结的包来生成 Union,并使用 Bloc 8.0。
小智 8
对于这种情况,我有一个解决方案/解决方法。
让我们创建一个(例如)AuthEvent.onUserDataUpdated(User) 事件,在流侦听器中,您必须使用此事件调用 add() 并为其创建一个处理程序 (on<...>(...)) 来发出新的验证状态。
| 归档时间: |
|
| 查看次数: |
2345 次 |
| 最近记录: |