美文网首页
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