Flutter Bloc 如何在听众内部发射
Flutter Bloc How to emit inside a listener
我想使用 Firebase 设置身份验证。我有这个 auth 存储库,它有这个获取当前用户的方法。
@override
Stream<User?> get user => _firebaseAuth.userChanges();
在我的集团内部,我有这个构造函数。
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();
}
});
}
}
当我的应用启动时,我在我的主 class 上调用它。
BlocProvider<AuthBloc>(
create: (context) => AuthBloc(context.read<AuthRepository>())
..add(const AuthEvent.started()),
),
这是我的状态
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;
}
现在我的 UI 上有这个取决于我的应用程序的状态。我想渲染不同的视图。
return state.when(
initial: () => _buildInitial(context),
authenticated: (user) => _buildAuthenticated(),
unauthenticated: () => _buildUnauthenticated(),
);
我的集团出现以下错误。
此处的这一行触发了错误。
我正在使用冻结包生成 Union,并使用 Bloc 8.0。
我有一个 solution/workaround 这个案例。
让我们创建一个(例如)AuthEvent.onUserDataUpdated(User) 事件,在流侦听器中,您必须使用此事件调用 add() 并为其创建一个处理程序 (on<...>(...))发出新的 AuthState。
我想使用 Firebase 设置身份验证。我有这个 auth 存储库,它有这个获取当前用户的方法。
@override
Stream<User?> get user => _firebaseAuth.userChanges();
在我的集团内部,我有这个构造函数。
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();
}
});
}
}
当我的应用启动时,我在我的主 class 上调用它。
BlocProvider<AuthBloc>(
create: (context) => AuthBloc(context.read<AuthRepository>())
..add(const AuthEvent.started()),
),
这是我的状态
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;
}
现在我的 UI 上有这个取决于我的应用程序的状态。我想渲染不同的视图。
return state.when(
initial: () => _buildInitial(context),
authenticated: (user) => _buildAuthenticated(),
unauthenticated: () => _buildUnauthenticated(),
);
我的集团出现以下错误。
此处的这一行触发了错误。
我正在使用冻结包生成 Union,并使用 Bloc 8.0。
我有一个 solution/workaround 这个案例。
让我们创建一个(例如)AuthEvent.onUserDataUpdated(User) 事件,在流侦听器中,您必须使用此事件调用 add() 并为其创建一个处理程序 (on<...>(...))发出新的 AuthState。