Dart中,超类'Bloc<xxx, xxx>'没有零参数构造函数。

8
我是Dart语言开发的初学者,尝试创建一个受此GitHub存储库启发的Flutter应用程序BLOC模式示例,但我遇到了一些与类继承相关的错误消息。 我已经熟悉了在dot net C#语言中的继承、超类和子类编程, 但在Dart的情况下,我需要一些建议。
以下是我的代码:
class UserRegBloc extends Bloc<UserRegEvent, UserRegState> {
  UserRepository userRepository;

   UserRegBloc({@required UserRepository userRepository}) {
   userRepository = UserRepository();
}

@override
UserRegState get initialState => UserRegInitial();

 @override
 Stream<UserRegState> mapEventToState(UserRegEvent event) async* {
   if (event is SignUpButtonPressed) {
     yield UserRegLoading();
       try {
      var user = await userRepository.signUpUserWithEmailPass(
        event.email, event.password);
    print("BLOC : ${user.email}");
    yield UserRegSuccessful(user: user);
  } catch (e) {
    yield UserRegFailure(message: e.toString());
    }
  }
 }
}

在此输入图片描述

编辑

我的pubspec.yaml依赖如下:

在此输入图片描述

2个回答

17

看起来您需要为bloc提供一个初始状态,类似于这样:

class UserRegBloc extends Bloc<UserRegEvent, UserRegState> {
  UserRepository userRepository;

   UserRegBloc({@required UserRepository userRepository}) : super(UserRegInitialState()) {
       userRepository = UserRepository();
   }
   // ...
}

UserRegInitialStateUserRegState的一个子类。

由于使用了不同版本的bloc库,这就是区别所在。你的链接项目使用的是flutter_bloc 3.0版本,而你提问中相同包的版本是6.1.1。因此,代码有些微小的差异。错误基本上告诉我们,UserRegBloc的基类需要一个参数。因此,在不提供该参数的情况下无法声明子类,从而导致错误。


非常感谢。是的,我注意到这个错误在旧版本的 bloc 库中没有出现。 - Ragesh S
我只是采用了git仓库的结构。 - Ragesh S

0

删除超类的构造函数(实例变量)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接