[英]'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.