Flutter 如何在颤振阵型中在一个立方体中添加多个状态?

Flutter 如何在颤振阵型中在一个立方体中添加多个状态?,flutter,dart,flutter-bloc,cubit,Flutter,Dart,Flutter Bloc,Cubit,我在Flatter中开发了一个应用程序,它对登录进行基于OTP的身份验证。早些时候,我管理类本身的状态,以便可以使用setState方法相应地呈现UI。然后我换成了flifter_bloc cubit模式来管理状态。但我不明白,我怎么能在一个立方体里跟踪多个状态 考虑以下州和州法典: **State**. @immutable abstract class LoginState {} class LoginInitial extends LoginState { final Map l

我在Flatter中开发了一个应用程序,它对登录进行基于OTP的身份验证。早些时候,我管理类本身的状态,以便可以使用setState方法相应地呈现UI。然后我换成了flifter_bloc 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,
          },
        ),
      );
    });
  }
}
然而,我认为这不是实现该模式的正确方法

你说得对。复杂状态开关的第一步是不使用
Cubit
,而是使用实际的
Bloc
。立方体用于非常简单的数据,基本上没有状态流逻辑。比如一个int,或者一个暗主题/光主题开关。或者可能是语言,在那里它只能是一个,而且完全是一个


但是你有一个复杂的流程。“中间”状态。因此,请使用
Bloc
并阅读有关此的教程,在这种情况下,正如您所说的那样,这不是一种正确的方法。为了更好地理解集团状态管理,请仔细阅读本教程。您可以在生成器函数中收听状态。将if语句更改为
(状态为MyState)
,之后,当状态更改时,生成器应该得到更新。如果这回答了你的问题?谢谢你的评论@SilkeNL。如果我使用state is MyState方法,实际上可以在不同的状态类中操纵一个状态。即使如此,我如何跟踪多个状态值。如果我在下一次将一个属性更改为另一个属性时对其进行操作,正如@nvoigt的回答所说,使用Bloc而不是Cubit可能会更好。然后您可以
产生不同的状态。在加载和加载状态之间来回切换。然后,您的小部件将在每次状态更改时更新。是的,@SilkeNL。我已经通过并将实施集团本身。事实上,我正在使用Flatter_bloc库。在他们的文档中,只有一个cubit示例。我跟随了这么多的指南,非常困惑。即使对于bloc,也有许多人使用Flatter_bloc,许多人直接从头开始编写。事实上,我的应用程序在将来会变得非常复杂。谢谢@nvoigt的建议。我试图实现集团本身,而不是使用立方体。然而,上面的例子非常复杂,会导致我有很多锅炉铭牌代码。如果可能的话,你能为我提供一个简单使用flutter_bloc库的例子吗。
 BlocBuilder<LoginCubit, LoginState>(builder: (context, state) {
                final data = (state as LoginInitial).loginState;
                if (!data["isPhoneSubmitted"]) {
                  return phoneNumberSubmitWidget();
                } else {
                  return codeVerificationWidget();
                }
              }),