Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit f10965f

Browse files
authored
FIX: UnderlineInputBorder hashCode and equality by including borderRadius (#118284)
1 parent 957781a commit f10965f

File tree

2 files changed

+68
-10
lines changed

2 files changed

+68
-10
lines changed

packages/flutter/lib/src/material/input_border.dart

+4-3
Original file line numberDiff line numberDiff line change
@@ -259,12 +259,13 @@ class UnderlineInputBorder extends InputBorder {
259259
if (other.runtimeType != runtimeType) {
260260
return false;
261261
}
262-
return other is InputBorder
263-
&& other.borderSide == borderSide;
262+
return other is UnderlineInputBorder
263+
&& other.borderSide == borderSide
264+
&& other.borderRadius == borderRadius;
264265
}
265266

266267
@override
267-
int get hashCode => borderSide.hashCode;
268+
int get hashCode => Object.hash(borderSide, borderRadius);
268269
}
269270

270271
/// Draws a rounded rectangle around an [InputDecorator]'s container.

packages/flutter/test/material/input_decorator_test.dart

+64-7
Original file line numberDiff line numberDiff line change
@@ -5338,11 +5338,40 @@ void main() {
53385338
gapPadding: 32.0,
53395339
));
53405340
expect(outlineInputBorder, isNot(const OutlineInputBorder()));
5341+
expect(outlineInputBorder, isNot(const OutlineInputBorder(
5342+
borderSide: BorderSide(color: Colors.red),
5343+
borderRadius: BorderRadius.all(Radius.circular(9.0)),
5344+
gapPadding: 32.0,
5345+
)));
5346+
expect(outlineInputBorder, isNot(const OutlineInputBorder(
5347+
borderSide: BorderSide(color: Colors.blue),
5348+
borderRadius: BorderRadius.all(Radius.circular(10.0)),
5349+
gapPadding: 32.0,
5350+
)));
5351+
expect(outlineInputBorder, isNot(const OutlineInputBorder(
5352+
borderSide: BorderSide(color: Colors.blue),
5353+
borderRadius: BorderRadius.all(Radius.circular(9.0)),
5354+
gapPadding: 33.0,
5355+
)));
53415356

5342-
// UnderlineInputBorder's equality is defined only by the borderSide
5343-
const UnderlineInputBorder underlineInputBorder = UnderlineInputBorder(borderSide: BorderSide(color: Colors.blue));
5344-
expect(underlineInputBorder, const UnderlineInputBorder(borderSide: BorderSide(color: Colors.blue)));
5357+
// UnderlineInputBorder's equality is defined by the borderSide and borderRadius
5358+
const UnderlineInputBorder underlineInputBorder = UnderlineInputBorder(
5359+
borderSide: BorderSide(color: Colors.blue),
5360+
borderRadius: BorderRadius.only(topLeft: Radius.circular(5.0), topRight: Radius.circular(5.0)),
5361+
);
5362+
expect(underlineInputBorder, const UnderlineInputBorder(
5363+
borderSide: BorderSide(color: Colors.blue),
5364+
borderRadius: BorderRadius.only(topLeft: Radius.circular(5.0), topRight: Radius.circular(5.0)),
5365+
));
53455366
expect(underlineInputBorder, isNot(const UnderlineInputBorder()));
5367+
expect(underlineInputBorder, isNot(const UnderlineInputBorder(
5368+
borderSide: BorderSide(color: Colors.red),
5369+
borderRadius: BorderRadius.only(topLeft: Radius.circular(5.0), topRight: Radius.circular(5.0)),
5370+
)));
5371+
expect(underlineInputBorder, isNot(const UnderlineInputBorder(
5372+
borderSide: BorderSide(color: Colors.blue),
5373+
borderRadius: BorderRadius.only(topLeft: Radius.circular(6.0), topRight: Radius.circular(6.0)),
5374+
)));
53465375
});
53475376

53485377
test('InputBorder hashCodes', () {
@@ -5358,11 +5387,39 @@ void main() {
53585387
gapPadding: 32.0,
53595388
).hashCode);
53605389
expect(outlineInputBorder.hashCode, isNot(const OutlineInputBorder().hashCode));
5390+
expect(outlineInputBorder.hashCode, isNot(const OutlineInputBorder(
5391+
borderRadius: BorderRadius.all(Radius.circular(9.0)),
5392+
borderSide: BorderSide(color: Colors.red),
5393+
gapPadding: 32.0,
5394+
).hashCode));
5395+
expect(outlineInputBorder.hashCode, isNot(const OutlineInputBorder(
5396+
borderRadius: BorderRadius.all(Radius.circular(10.0)),
5397+
borderSide: BorderSide(color: Colors.blue),
5398+
gapPadding: 32.0,
5399+
).hashCode));
5400+
expect(outlineInputBorder.hashCode, isNot(const OutlineInputBorder(
5401+
borderRadius: BorderRadius.all(Radius.circular(9.0)),
5402+
borderSide: BorderSide(color: Colors.blue),
5403+
gapPadding: 33.0,
5404+
).hashCode));
53615405

5362-
// UnderlineInputBorder's hashCode is defined only by the borderSide
5363-
const UnderlineInputBorder underlineInputBorder = UnderlineInputBorder(borderSide: BorderSide(color: Colors.blue));
5364-
expect(underlineInputBorder.hashCode, const UnderlineInputBorder(borderSide: BorderSide(color: Colors.blue)).hashCode);
5365-
expect(underlineInputBorder.hashCode, isNot(const UnderlineInputBorder().hashCode));
5406+
// UnderlineInputBorder's hashCode is defined by the borderSide and borderRadius
5407+
const UnderlineInputBorder underlineInputBorder = UnderlineInputBorder(
5408+
borderSide: BorderSide(color: Colors.blue),
5409+
borderRadius: BorderRadius.only(topLeft: Radius.circular(5.0), topRight: Radius.circular(5.0)),
5410+
);
5411+
expect(underlineInputBorder.hashCode, const UnderlineInputBorder(
5412+
borderSide: BorderSide(color: Colors.blue),
5413+
borderRadius: BorderRadius.only(topLeft: Radius.circular(5.0), topRight: Radius.circular(5.0)),
5414+
).hashCode);
5415+
expect(underlineInputBorder.hashCode, isNot(const UnderlineInputBorder(
5416+
borderSide: BorderSide(color: Colors.red),
5417+
borderRadius: BorderRadius.only(topLeft: Radius.circular(5.0), topRight: Radius.circular(5.0)),
5418+
).hashCode));
5419+
expect(underlineInputBorder.hashCode, isNot(const UnderlineInputBorder(
5420+
borderSide: BorderSide(color: Colors.blue),
5421+
borderRadius: BorderRadius.only(topLeft: Radius.circular(6.0), topRight: Radius.circular(6.0)),
5422+
).hashCode));
53665423
});
53675424

53685425
testWidgets('InputDecorationTheme implements debugFillDescription', (WidgetTester tester) async {

0 commit comments

Comments
 (0)