如何传递cubit和state作为参数?

问题描述 投票:0回答:2

我有一个通用对话框,用于所有操作,例如登录和注销。构造函数看起来像这样


GenericDialog({
  required String dialogTitle, 
  required Widget dialogContent,
});

现在我尝试将 BlocConsumer 添加到对话框中,为了使其正常工作,我需要将 Cubit 和 State 传递到构造函数中。以下是我准备的肘尺和状态


abstract class BaseState extends Equatable
class LoginState extends BaseState
class LogoutState extends BaseState

abstract class BaseCubit<S> extends Cubit<S>
class LoginCubit extends BaseCubit<LoginState>
class LogoutCubit extends BaseCubit<LogoutState>

下面是构造函数

GenericDialog({
  required String dialogTitle, 
  required Widget dialogContent,
  required BaseCubit cubit,
  required BaseState state,
});

我如何使用它

GenericDialog({
  dialogTitle: 'LOGIN', 
  dialogContent: widget,
  cubit: LoginCubit,
  state: LoginState,
});

当我将肘和状态传递给构造函数时,我得到

The argument type 'Type' can't be assigned to the parameter type 'BaseCubit<dynamic>'
flutter flutter-bloc
2个回答
0
投票

abstract class BaseCubit<S> extends Cubit<S>
应该是
abstract class BaseCubit extends Cubit<BaseState>

LoginCubit
的构造函数中,您将传递
: super(LoginState)
。与
LogoutCubit
相同。

我认为你应该使用

BlocConsumer<T, BaseState>
来访问
GenericDialog
内的肘。
对话框将是
GenericDialog<T extends BaseCubit> extends ... {}

然后在对话框之外,您应该使用
BlocProvider(...)
创建您的肘尺。

您将致电

GenericDialog<LoginCubit>({ dialogTitle: 'LOGIN', dialogContent: widget })

来源

我用我自己的项目

做了类似的事情

0
投票

最后,这对我有用

要将肘节和状态传递给另一个类,您必须像这样声明该类

class YourClassName<T extends Cubit<S>, S> {
  const YourClassName();
}

要将 cubit 和 state 传递给函数,你必须像这样声明函数

void YourFunctionName<T extends Cubit<S>, S> {
  // your code here
}
© www.soinside.com 2019 - 2024. All rights reserved.