【发布时间】:2022-10-14 18:23:39
【问题描述】:
我有一个发出一些状态的集团用户状态
这些是我目前的状态
part of 'user_bloc.dart';
@immutable
abstract class UserState extends Equatable {}
class UserInitial extends UserState {
@override
List<Object?> get props => [];
}
class UserCreating extends UserState {
@override
List<Object?> get props => [];
}
class UserCreated extends UserState {
late final String message;
UserCreated(this.message);
@override
List<Object?> get props => [];
}
class UserError extends UserState {
late final String error;
UserError(this.error);
@override
List<Object?> get props => [error];
}
下面也是我的 UserBloc 事件
part of 'user_bloc.dart';
@immutable
abstract class UserEvent extends Equatable {
@override
List<Object?> get props => [];
}
class CreateUser extends UserEvent {
final String name;
final String email;
final String password;
final String? imageUrl;
CreateUser({
required this.name,
required this.email,
required this.password,
required this.imageUrl,
});
}
下面是我发出状态的主要 UserBloc
class UserBloc extends Bloc<UserEvent, UserState> {
UserRepository userRepository;
UserBloc(this.userRepository) : super(UserInitial()) {
on<CreateUser>((event, emit) async {
emit(UserCreating());
try {
final result = await userRepository.signup(
name: event.name,
password: event.password,
email: event.email,
);
print(result);
emit(
UserCreated('User created successfully'),
);
} on DioError catch (error) {
emit(
UserError(
error.response.toString(),
),
);
} catch (error) {
emit(
UserError(
error.toString(),
),
);
}
});
}
}
我已经用 Multirepository 提供程序和 muiltiblocprovider 包装了我的 MaterialApp,我的所有块都被初始化了。下面是代码。
@override
Widget build(BuildContext context) {
return MultiRepositoryProvider(
providers: [
RepositoryProvider(create: (context) => UserRepository()),
],
child: MultiBlocProvider(
providers: [
BlocProvider<ThemeModeCubit>(
create: (context) => ThemeModeCubit(),
),
BlocProvider<InternetCubit>(
create: (context) => InternetCubit(connectivity),
),
BlocProvider(
create: (context) => UserBloc(
RepositoryProvider.of<UserRepository>(context),
),
)
],
child: ValueListenableBuilder(...)
最后,我在代码中使用 bloc 监听器来监听 bloc 中的更改,但在更改之前我没有得到任何响应。
final userRepo = RepositoryProvider.of<UserRepository>(context);
child: BlocListener(
bloc: UserBloc(userRepo),
listener: (ctx, state) {
print('listener called');
if (state is UserCreating) {
print('loading emited');
QuickAlert.show(
context: context,
type: QuickAlertType.loading,
title: 'Loading',
text: 'Signing up',
);
} else if (state is UserCreated) {
QuickAlert.show(
context: context,
type: QuickAlertType.success,
text: 'User created sucessfully', //state.message,
);
} else if (state is UserError) {
QuickAlert.show(
context: context,
type: QuickAlertType.success,
text: state.error,
);
}
},
child: Form(...)
这就是我从用户那里调用我的事件的方式
context.read<UserBloc>().add(
CreateUser(
name: name,
email: email,
password: password,
imageUrl: imageUrl,
),
);
【问题讨论】:
标签: flutter dart bloc flutter-bloc