美文网首页
flutter对象是否相同

flutter对象是否相同

作者: Crassus | 来源:发表于2023-04-10 14:01 被阅读0次

重写operator和hashCode 方法的属性是否和旧的属性相同

 @override
  bool operator ==(Object other) {
    if (identical(this, other)) {
      return true;
    }
    if (other.runtimeType != runtimeType) {
      return false;
    }

    return other is AxisLabel &&
        other.labelStyle == labelStyle &&
        other.labelSize == labelSize &&
        other.text == text &&
        other.trimmedText == trimmedText &&
        other.renderText == renderText &&
        other.value == value;
  }

  @override
  int get hashCode {
    final List<Object?> values = <Object?>[
      labelStyle,
      labelSize,
      text,
      trimmedText,
      renderText,
      value
    ];
    return Object.hashAll(values);
  }

或者通过插件(equatable)https://pub.dev/packages/equatable
通过继承省去写繁杂的operator和hascode

import 'package:equatable/equatable.dart';

class Person extends Equatable {
  const Person(this.name);

  final String name;

  @override
  List<Object> get props => [name];
}
重写对比的属性
@override
  List<Object> get props => [name];

@override
  bool get stringify => true;   // 将对象String化

全局配置string化

EquatableConfig.stringify = true;

对于不能继承的使用EquatableMixin 集成

class EquatableDateTime extends DateTime with EquatableMixin {
  EquatableDateTime(
    int year, [
    int month = 1,
    int day = 1,
    int hour = 0,
    int minute = 0,
    int second = 0,
    int millisecond = 0,
    int microsecond = 0,
  ]) : super(year, month, day, hour, minute, second, millisecond, microsecond);

  @override
  List<Object> get props {
    return [year, month, day, hour, minute, second, millisecond, microsecond];
  }
}

子类新增属性

class EquatableDateTimeSubclass extends EquatableDateTime {
  final int century;

  EquatableDateTimeSubclass(
    this.century,
    int year,[
    int month = 1,
    int day = 1,
    int hour = 0,
    int minute = 0,
    int second = 0,
    int millisecond = 0,
    int microsecond = 0,
  ]) : super(year, month, day, hour, minute, second, millisecond, microsecond);

  @override
  List<Object> get props => super.props..addAll([century]);
}

相关文章

网友评论

      本文标题:flutter对象是否相同

      本文链接:https://www.haomeiwen.com/subject/qhxwddtx.html