Mus*_*afa 5 dart flutter flutter-bloc cubit
我正在 flutter 中开发一个应用程序,它执行基于 OTP 的身份验证来登录。之前我正在管理类本身的状态,以便我可以使用 setState 方法来相应地呈现 UI。然后我改成 flutter_bloc cubit 模式来管理状态。但我不明白如何才能在一肘内记录多个状态。
考虑以下 State 和 Cubit 代码,
**State**.
@immutable
abstract class LoginState {}
class LoginInitial extends LoginState {
final Map loginState;
LoginInitial({this.loginState});
}
**Cubit**
class LoginCubit extends Cubit<LoginState> {
Map loginState = {
"isPhoneSubmitted": false,
"isOtpArrived": false,
};
LoginCubit()
: super(
LoginInitial(
loginState: {
"isPhoneSubmitted": false,
"isOtpArrived": false,
},
),
);
void sendOtp() {
emit(
LoginInitial(
loginState: {
"isPhoneSubmitted": true,
"isOtpArrived": false,
},
),
);
Future.delayed(Duration(seconds: 4), () {
emit(
LoginInitial(
loginState: {
"isPhoneSubmitted": true,
"isOtpArrived": true,
},
),
);
});
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,最初,我将地图内的两个值设置为 false。当用户单击按钮时,将其设置isPhoneSubmitted为 true。几秒钟后isOtpArrived变为 true(将来获得 OTP 后)。但是,我认为这不是实现该模式的正确方法。考虑一下,如果我在一个类中有 10 个属性,并且每次调用 emit 方法时都会发送包含 10 个属性的映射。
有人可以帮助我理解或实施最佳实践来保存/更新 Cubit 正在监听的小部件的多个状态吗?
另外,在小部件中,这就是我监听变化的方式,
BlocBuilder<LoginCubit, LoginState>(builder: (context, state) {
final data = (state as LoginInitial).loginState;
if (!data["isPhoneSubmitted"]) {
return phoneNumberSubmitWidget();
} else {
return codeVerificationWidget();
}
}),
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12880 次 |
| 最近记录: |