Fix ImageStreamListener's hashCode & operator== (#33217)
I forgot to add `onChunk` to them in #33092
This commit is contained in:
parent
ef9866bf27
commit
be2918ff30
@ -113,7 +113,7 @@ class ImageStreamListener {
|
|||||||
final ImageErrorListener onError;
|
final ImageErrorListener onError;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode => hashValues(onImage, onError);
|
int get hashCode => hashValues(onImage, onChunk, onError);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(dynamic other) {
|
bool operator ==(dynamic other) {
|
||||||
@ -121,6 +121,7 @@ class ImageStreamListener {
|
|||||||
return false;
|
return false;
|
||||||
final ImageStreamListener typedOther = other;
|
final ImageStreamListener typedOther = other;
|
||||||
return onImage == typedOther.onImage
|
return onImage == typedOther.onImage
|
||||||
|
&& onChunk == typedOther.onChunk
|
||||||
&& onError == typedOther.onError;
|
&& onError == typedOther.onError;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import 'dart:ui';
|
|||||||
import 'package:flutter/painting.dart';
|
import 'package:flutter/painting.dart';
|
||||||
import 'package:flutter/scheduler.dart' show timeDilation;
|
import 'package:flutter/scheduler.dart' show timeDilation;
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
class FakeFrameInfo implements FrameInfo {
|
class FakeFrameInfo implements FrameInfo {
|
||||||
FakeFrameInfo(int width, int height, this._duration)
|
FakeFrameInfo(int width, int height, this._duration)
|
||||||
@ -606,6 +607,38 @@ void main() {
|
|||||||
await tester.pump(const Duration(milliseconds: 200)); // emit 2nd frame.
|
await tester.pump(const Duration(milliseconds: 200)); // emit 2nd frame.
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('ImageStreamListener hashCode and equals', (WidgetTester tester) {
|
||||||
|
void handleImage(ImageInfo image, bool synchronousCall) { }
|
||||||
|
void handleImageDifferently(ImageInfo image, bool synchronousCall) { }
|
||||||
|
void handleError(dynamic error, StackTrace stackTrace) { }
|
||||||
|
void handleChunk(ImageChunkEvent event) { }
|
||||||
|
|
||||||
|
void compare({
|
||||||
|
@required ImageListener onImage1,
|
||||||
|
@required ImageListener onImage2,
|
||||||
|
ImageChunkListener onChunk1,
|
||||||
|
ImageChunkListener onChunk2,
|
||||||
|
ImageErrorListener onError1,
|
||||||
|
ImageErrorListener onError2,
|
||||||
|
bool areEqual = true,
|
||||||
|
}) {
|
||||||
|
final ImageStreamListener l1 = ImageStreamListener(onImage1, onChunk: onChunk1, onError: onError1);
|
||||||
|
final ImageStreamListener l2 = ImageStreamListener(onImage2, onChunk: onChunk2, onError: onError2);
|
||||||
|
Matcher comparison(dynamic expected) => areEqual ? equals(expected) : isNot(equals(expected));
|
||||||
|
expect(l1, comparison(l2));
|
||||||
|
expect(l1.hashCode, comparison(l2.hashCode));
|
||||||
|
}
|
||||||
|
|
||||||
|
compare(onImage1: handleImage, onImage2: handleImage);
|
||||||
|
compare(onImage1: handleImage, onImage2: handleImageDifferently, areEqual: false);
|
||||||
|
compare(onImage1: handleImage, onChunk1: handleChunk, onImage2: handleImage, onChunk2: handleChunk);
|
||||||
|
compare(onImage1: handleImage, onChunk1: handleChunk, onError1: handleError, onImage2: handleImage, onChunk2: handleChunk, onError2: handleError);
|
||||||
|
compare(onImage1: handleImage, onChunk1: handleChunk, onImage2: handleImage, areEqual: false);
|
||||||
|
compare(onImage1: handleImage, onChunk1: handleChunk, onError1: handleError, onImage2: handleImage, areEqual: false);
|
||||||
|
compare(onImage1: handleImage, onChunk1: handleChunk, onError1: handleError, onImage2: handleImage, onChunk2: handleChunk, areEqual: false);
|
||||||
|
compare(onImage1: handleImage, onChunk1: handleChunk, onError1: handleError, onImage2: handleImage, onError2: handleError, areEqual: false);
|
||||||
|
});
|
||||||
|
|
||||||
// TODO(amirh): enable this once WidgetTester supports flushTimers.
|
// TODO(amirh): enable this once WidgetTester supports flushTimers.
|
||||||
// https://github.com/flutter/flutter/issues/30344
|
// https://github.com/flutter/flutter/issues/30344
|
||||||
// testWidgets('remove and add listener before a delayed frame is scheduled', (WidgetTester tester) async {
|
// testWidgets('remove and add listener before a delayed frame is scheduled', (WidgetTester tester) async {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user