【问题标题】:The superclass 'Bloc<xxx, xxx>' doesn't have a zero argument constructor in dart超类 'Bloc<xxx, xxx>' 在 dart 中没有零参数构造函数
【发布时间】:2021-03-05 08:00:56
【问题描述】:

我是 Dart 语言开发的初学者。我尝试创建一个受this GitHub repo 启发的示例 Flutter 应用程序 BLOC 模式,但我收到了一些与类继承相关的错误消息。我已经熟悉点网C#语言中的继承和超类和子类编程。但就飞镖而言,我需要一些建议。

这是我的代码:

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 依赖项如下:

【问题讨论】:

    标签: flutter dart bloc flutter-bloc flutter-state


    【解决方案1】:

    您似乎需要为集团提供初始状态。像这样的:

    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 库中没有出现此错误。
    • 我只是采用了git repo的结构。
    猜你喜欢
    • 2021-04-17
    • 2021-08-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    相关资源
    最近更新 更多