如何在颤振块图案中的一肘中添加多个状态?

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)

nvo*_*igt 8

但是,我认为这不是实现该模式的正确方法。

你是对的。复杂状态切换的第一步是不使用Cubit实际的Bloc. 肘节适用于非常简单的数据,基本上根本没有状态流逻辑。就像一个整数。或者也许是深色主题/浅色主题切换。或者也许是语言,它只能是一种,而且只能是一种。

但你有一个复杂的流程。具有“中间”状态。因此,请使用Bloc并阅读有关此的教程,在本例中可能是登录教程