繁体   English   中英

“LoginBloc”不扩展“Cubit”<loginstate> '</loginstate>

[英]'LoginBloc' doesn't extend 'Cubit<LoginState>'

我是 flutter 的新手。 目前我使用 bloc 来帮助我。 当我在 UI 中使用 bloc 时,我总是得到'LoginBloc' doesn't extend 'Cubit<LoginState>'我使用依赖项flutter_bloc 这里是我的 UI

 @override
Widget build(BuildContext context) {
 return Scaffold(
  body: BlocBuilder<LoginBloc, LoginState>(
    builder: (BuildContext context, LoginState state) {},
   ),
 );
 }

这是我的集团 class。

class LoginBloc extends Bloc<LoginEvent, LoginState> {
final AuthenticationService authenticationService;

LoginBloc(this.authenticationService) : super(null);

@override
Stream<LoginState> mapEventToState(LoginEvent event) async* {
 if (event is LoginSubmitted) {
  yield* _loginMapToState(event);
 }
}

Stream _loginMapToState(LoginSubmitted event) async* {
try {
  UserDTO userDTO =
      UserDTO(event.username, event.password, event.rememberMe);
  var response =
      await authenticationService.authenticate(userDTO.toJson().toString());
  if (response.statusCode == 200) {
    Map<String, String> token = jsonDecode(response.body);
    await Preferences.setString(ConstValue.TOKEN, token['id_token']);
    yield LoginSuccess();
   }
  } catch (e) {
  yield LoginError(e);
 }
 }
}

您需要使用cubit或bloc。 您在这里使用 bloc 并扩展 cubitState 这是不可行的。 尝试扩展 BlocState 而不是 CubitState。 此外,共享 bloc 代码的事件和状态部分,这可能有助于调试您的代码。

问题可能出在您的 Bloc 事件 Class 中。 例如,如果您有下面的 class,则可能会导致该错误

class GetTrackStages extends StagesEvent {
  final String trackId;

 GetTrackStages({@required this.trackId});
}

如果您有下面的 class,则不会出现该问题

class GetTrackStages extends StagesEvent {
  final String trackId;

  const GetTrackStages({@required this.trackId});
}

您需要做的就是将const添加到事件构造函数中。

就我而言,我在 BlocBuilder 参数上犯了错误。 第一个总是 Bloc,第二个总是 State

在此处输入图像描述

仅更改 bloc 文件夹中的文件名

ex - [ productCategoryList_Bloc.dart ] 到 [ list_bloc.dart ]

ex - [ articleMyListEvent_Bloc.dart ] 到 [ article_event.dart ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM