【问题标题】:flutter: Too many positional arguments: 0 expected, but 1 found颤振:位置参数太多:预期为 0,但找到了 1
【发布时间】:2020-04-20 01:44:30
【问题描述】:

我一直在关注使用 BLoC 的 this NoSQL tutorial。但是当我将“fruit_event.dart”中的代码粘贴到 Visual Studio Code 中时,它给了我一个错误。

fruit_event.dart:

import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';
import 'package:sembast_prep/data/fruit.dart';

@immutable
abstract class FruitEvent extends Equatable {
  FruitEvent([List props = const []]) : super(props); // error here!
}

class LoadFruits extends FruitEvent {}

class AddRandomFruit extends FruitEvent {}

class UpdateWithRandomFruit extends FruitEvent {
  final Fruit updatedFruit;

  UpdateWithRandomFruit(this.updatedFruit) : super([updatedFruit]);
}

class DeleteFruit extends FruitEvent {
  final Fruit fruit;

  DeleteFruit(this.fruit) : super([fruit]);
}

我收到此错误(Visual Studio 代码):

[List<dynamic> props = const []]
Too many positional arguments: 0 expected, but 1 found.
Try removing the extra positional arguments.dart(extra_positional_arguments)

【问题讨论】:

    标签: flutter nosql bloc


    【解决方案1】:

    Equatable类源码:https://github.com/felangel/equatable/blob/master/lib/src/equatable.dart

    它只有一个构造函数,并且构造函数不接受任何参数/参数。所以你不能从你的构造函数中调用super(props)

    但是,在您的代码中,您将一个参数(即props)传递给超类的构造函数,即在您的情况下为 Equatable。

    替换这个:

    FruitEvent([List props = const []]) : super(props);
    

    有了这个:

    FruitEvent([List props = const []]);
    

    而且它不会给你任何错误。

    您可能想参考这个问题来了解 dart 中超级构造函数的用法:How do I call a super constructor in Dart?

    已编辑:

    1. 您应该使用 Equitable 类来覆盖您的哈希码和 toString。
    2. 所以对于您想要包含在哈希码中的字段和 toString 你需要有以下覆盖:

    /// The [List] of `props` (properties) which will be used to determine whether
    /// two [Equatables] are equal.
    @override
    List<Object> get props => [parameter1, parameter2, parameter3.....];
    

    1. 但是由于你的类中没有任何字段,所以它没有多大意义 使用 Equitable 的意义。

    从源代码中阅读这条评论:

    /// A class that helps implement equality
    /// without needing to explicitly override == and [hashCode].
    /// Equatables override their own `==` operator and [hashCode] based on their `props`.
    const Equatable();
    

    您可以参考:https://pub.dev/packages/equatable#-example-tab- 了解如何使用 Equitable 类。

    希望对您有所帮助,如有任何疑问,请发表评论。 如果此答案对您有帮助,请接受并投票。

    【讨论】:

    • 感谢您的回答!现在我得到这个错误:缺少 getter Equatable.props 的具体实现
    • 我已经编辑了我的答案,请检查一下,如果您有任何疑问,请告诉我
    猜你喜欢
    • 2021-09-21
    • 2022-07-20
    • 2021-11-09
    • 2021-09-17
    • 2019-11-03
    • 1970-01-01
    • 2021-11-10
    • 2021-06-04
    • 2021-05-22
    相关资源
    最近更新 更多