这是状态类Code
class SignInState {
String email;
String password;
bool passwordVisible;
SignInState(
{this.email = "", this.password = "", this.passwordVisible = false});
List<Object> get props => [this.email, this.password, this.passwordVisible];
SignInState copyWith(
{String? email, String? password, bool? passwordVisible}) {
return SignInState(
email: email ?? this.email,
password: password ?? this.password,
passwordVisible: passwordVisible ?? this.passwordVisible);
}
}
// class SignInInitial extends SignInState {
// SignInInitial({
// String email = "",
// String password = "",
// bool passwordVisible = false,
// }) : super(
// email: email, password: password, passwordVisible: passwordVisible);
// }
class SignInLoading extends SignInState {}
class SignInSuccess extends SignInState {}
class SignInError extends SignInState {
final String error;
SignInError({required this.error});
}
字符串
此为事件类代码
@immutable
sealed class SignInEvent {}
class SignInEmailEvent extends SignInEvent {
final String email;
SignInEmailEvent({required this.email});
}
class SignInPasswordEvent extends SignInEvent {
final String password;
SignInPasswordEvent({required this.password});
}
class SignInPasswordVisibleEvent extends SignInEvent {
final bool passwordVisible;
SignInPasswordVisibleEvent({required this.passwordVisible});
}
class SignInLoginButtonEvent extends SignInEvent {}
class SignInRegisterButtonEvent extends SignInEvent {
final String email;
final String password;
SignInRegisterButtonEvent({required this.email, required this.password});
}
**This is the BloC Code**
class SignInBloc extends Bloc<SignInEvent, SignInState> {
SignInBloc() : super(SignInState()) {
on<SignInEmailEvent>((event, emit) {
// print("Email is ${event.email}");
emit(state.copyWith(
email: event.email,
));
});
on<SignInPasswordEvent>((event, emit) {
// print("Email is ${event.password}");
emit(state.copyWith(password: event.password));
});
on<SignInPasswordVisibleEvent>(
(event, emit) =>
emit(state.copyWith(passwordVisible: event.passwordVisible)),
);
on<SignInLoginButtonEvent>(
(event, emit) async {
String email = state.email;
String password = state.password;
print("Email is $email" + "Password is $password");
if (email.isEmpty) {
// print("Please enter email and password");
emit(SignInError(error: "Please Enter Email"));
} else if (password.isEmpty) {
// print("Please enter email and password");
emit(SignInError(error: "Please Enter password"));
}
try {
final credential = await FirebaseAuth.instance
.signInWithEmailAndPassword(email: email, password: password);
// print("I am Here");
if (credential.user == null) {
// print("User Not Found");
emit(SignInError(error: "User Not Found"));
}
if (credential.user!.emailVerified == false) {
// print("Email Not Verified");
emit(SignInError(error: "Email Not Verified"));
}
var user = credential.user;
if (user != null) {
emit(SignInSuccess());
//emit(SignInSuccess());
}
} on FirebaseAuthException catch (e) {
if (e.code == "user-not-found") {
//print("User Not Found");
emit(SignInError(error: "User Not Found"));
} else if (e.code == 'wrong-password') {
//print("Wrong Password");
emit(SignInError(error: "Wrong Password"));
} else if (e.code == 'invalid-email') {
//print("Invalid Email");
emit(SignInError(error: "Invalid Email"));
}
}
},
);
}
}
型
我找不到我哪里做错了。键入电子邮件并按注册按钮打印-电子邮件是miraj密码是键入通行证并按注册按钮打印-电子邮件是密码是123为什么电子邮件/密码设置为空?还有,设置电子邮件并一起传递打印-电子邮件是miraj密码是123再次点击打印-电子邮件是密码是两者都设置为null。如何解决此问题?
1条答案
按热度按时间nfs0ujit1#
只要你调用
emit(SignInSuccess());
,你就可以将当前状态更改为电子邮件和密码中没有任何数据的状态。不要使用
BaseBloc
类的state
属性,而是通过事件提供变量。表单触发了将由块处理的
SignInLoginEvent
。块基本上将事件转换为状态。UI使用BlocBuilder
来显示不同的东西,这取决于从块发出的状态。请注意,BlocBuilder
需要是相同类型的BlocProvider
的(不一定是直接的)子级。事件
字符串
状态
型
区块
型
登录表单
型