【问题标题】:Operator '+' not defined for the type 'x' - Flutter未为类型“x”定义运算符“+” - Flutter
【发布时间】:2021-10-01 13:49:16
【问题描述】:

我正在尝试向我的关注者添加 +1,但我不能,因为我遇到了错误。我已经评论了下面的错误,我正在通过 reso coder 实现颤振 DDD。

@immutable
abstract class ValueObject<T> {
  const ValueObject();
  Either<ValueFailure<T>, T> get value;
  

  /// throws [UnexpextedValueError] containing the [ValueFailure]
  T getOrCrash() {
    // id = identity - same as writing (right) => right
    return value.fold((f) => throw UnexpectedValueError(f), id);
  }

  Either<ValueFailure<dynamic>, Unit> get failureOrUnit {
    return value.fold(
      (l) => left(l),
      (r) => right(unit),
    );
  }

  bool isValid() => value.isRight();

  @override
  bool operator ==(Object other) {
    if (identical(this, other)) return true;

    return other is ValueObject<T> && other.value == value;
  }

  @override
  int get hashCode => value.hashCode;

  @override
  String toString() => 'Value($value)';
}
class Followers extends ValueObject<int> {
  @override
  final Either<ValueFailure<int>, int> value;
  factory Followers(int input) {
    return Followers._(validateintegerNotNegative(input));
  }
  const Followers._(this.value);
}
final updatedUser =
            state.user.copyWith(followers: state.user.followers + 1); 

错误:

"message": "没有为类型 'Followers' 定义运算符 '+'。\n尝试定义运算符 '+'。"

【问题讨论】:

  • 参数followers接受什么类型的值?
  • 很可能followers 接受一个对象,但您传递的是一个整数。可以查一下吗?
  • 大概你的意思是Followers(state.users.followers.value.right + 1),或者你需要明确地将operator + 添加到Followers 类来为你做这件事。
  • Followers 参数只接受整数,但我也试图让它接受像 '+' 或 '-' 这样的运算符。

标签: flutter dart bloc


【解决方案1】:

TL;DR:定义operator +方法

这是更改类:

class Followers extends ValueObject<int> {
  @override
  final Either<ValueFailure<int>, int> value;
  factory Followers(int input) {
    return Followers._(validateintegerNotNegative(input));
  }

  Followers operator +(int val) {
    return Followers(value.getOrElse(() => null) + val);
  }

  Followers operator -(int val) {
    return Followers(value.getOrElse(() => null) + val);
  }

  @override
  String toString() {
    return value.getOrElse(() => null).toString();
  }
  const Followers._(this.value);
}

我如何使用它进行测试:

Followers f = Followers(0);         // 0
f = Followers(f.getOrCrash() + 1);  // 1
f = Followers(f.getOrCrash() + 10); // 11
f = Followers(f.getOrCrash() - 2);  // 9

【讨论】:

  • 我还是一头雾水。
  • 我更新了答案
  • 很抱歉,我知道我会要求很多,但您能否通过实现我自己的 valueobject 逻辑来重写代码,因为我正在全局使用 valueobject 来处理不需要添加或减去的其他类.
  • 我不承诺任何事情。但是,在这种情况下,请在 https://flutlab.ioshare 项目中重新创建您的问题 - 这样我就不会猜到您现在拥有的代码。
猜你喜欢
  • 2021-11-30
  • 2021-06-11
  • 2021-03-23
  • 1970-01-01
  • 2021-04-03
  • 2021-09-10
  • 1970-01-01
  • 2022-10-15
  • 2020-10-10
相关资源
最近更新 更多