Sobes.tech
Middle

როგორ შევცვალოთ ობიექტებისთვის შედარების ოპერაცია Flutter-ში?

sobes.tech AI

პასუხი AI-სგან

რათა გადახედოთ შედარების ოპერაციებს == და hashCode, საჭიროა მათი კლასში განხორციელება. ამისთვის ხშირად გამოიყენება პაკეტი equatable.

import 'package:equatable/equatable.dart';

class MyObject extends Equatable {
  final int id;
  final String name;

  const MyObject(this.id, this.name);

  @override
  List<Object?> get props => [id, name];
}

equatable-ის გარეშე, მათი განხორციელება ასე გამოიყურება:

class MyObject {
  final int id;
  final String name;

  const MyObject(this.id, this.name);

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

    return other is MyObject &&
        other.id == id &&
        other.name == name;
  }

  @override
  int get hashCode => id.hashCode ^ name.hashCode;
}

==-ის გადაწერაზე, ყოველთვის აუცილებელია hashCode-ის გადაწერა, რათა შეინარჩუნოს მათ შორის კონტრაქტი: თუ ორი ობიექტი თანაბარია ==-ით, მათი hash კოდებიც უნდა იყოს თანაბარი. საპირისპირო არ არის სწორი.

გამოყენება:

final obj1 = MyObject(1, 'ტესტი');
final obj2 = MyObject(1, 'ტესტი');
final obj3 = MyObject(2, 'სხვა');

print(obj1 == obj2); // გამოტანა: true
print(obj1 == obj3); // გამოტანა: false