From b39e315e5cb9a9c51ebdf3242a108084378a1d9b Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Wed, 7 Aug 2019 15:07:16 -0700 Subject: [PATCH] Add equals and hasCode to Tween (#37793) --- packages/flutter/lib/src/animation/tween.dart | 17 ++++++++++++++++- packages/flutter/test/animation/tween_test.dart | 14 ++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/animation/tween.dart b/packages/flutter/lib/src/animation/tween.dart index 82401c1bb2..20cd9c42a3 100644 --- a/packages/flutter/lib/src/animation/tween.dart +++ b/packages/flutter/lib/src/animation/tween.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:ui' show Color, Size, Rect; +import 'dart:ui' show Color, Rect, Size, hashValues; import 'package:flutter/foundation.dart'; @@ -260,6 +260,21 @@ class Tween extends Animatable { return lerp(t); } + @override + int get hashCode { + return hashValues(begin, end); + } + + @override + bool operator ==(dynamic other) { + if (identical(this, other)) + return true; + if (other.runtimeType != runtimeType) + return false; + final Tween typedOther = other; + return typedOther.begin == begin && typedOther.end == end; + } + @override String toString() => '$runtimeType($begin \u2192 $end)'; } diff --git a/packages/flutter/test/animation/tween_test.dart b/packages/flutter/test/animation/tween_test.dart index a0aedecd5e..3ea5592cee 100644 --- a/packages/flutter/test/animation/tween_test.dart +++ b/packages/flutter/test/animation/tween_test.dart @@ -93,4 +93,18 @@ void main() { expect(tween.lerp(0.5), 100.0); expect(tween.lerp(1.0), 100.0); }); + + test('Tween equals', () { + final Tween doubleTween1 = Tween(begin: 10, end: 22); + final Tween doubleTween2 = Tween(begin: 10, end: 22); + final Tween doubleTween3 = Tween(begin: 33, end: 44); + final Tween intTween = Tween(begin: 33, end: 44); + final Tween constantTween = ConstantTween(10); + + expect(doubleTween1 == doubleTween1, isTrue); + expect(doubleTween1 == doubleTween2, isTrue); + expect(doubleTween2 == doubleTween3, isFalse); + expect(doubleTween2 == intTween, isFalse); + expect(doubleTween1 == constantTween, isFalse); + }); }