diff --git a/packages/flutter/lib/src/painting/alignment.dart b/packages/flutter/lib/src/painting/alignment.dart index 6f3903406e6..2a1365b6721 100644 --- a/packages/flutter/lib/src/painting/alignment.dart +++ b/packages/flutter/lib/src/painting/alignment.dart @@ -11,6 +11,7 @@ import 'dart:ui' as ui show lerpDouble; import 'package:flutter/foundation.dart'; import 'basic_types.dart'; +import 'debug.dart'; /// Base class for [Alignment] that allows for text-direction aware /// resolution. @@ -584,7 +585,7 @@ class AlignmentDirectional extends AlignmentGeometry { @override Alignment resolve(TextDirection? direction) { - assert(direction != null, 'Cannot resolve $runtimeType without a TextDirection.'); + assert(debugCheckCanResolveTextDirection(direction, '$AlignmentDirectional')); return switch (direction!) { TextDirection.rtl => Alignment(-start, y), TextDirection.ltr => Alignment(start, y), @@ -653,7 +654,7 @@ class _MixedAlignment extends AlignmentGeometry { @override Alignment resolve(TextDirection? direction) { - assert(direction != null, 'Cannot resolve $runtimeType without a TextDirection.'); + assert(debugCheckCanResolveTextDirection(direction, '$_MixedAlignment')); return switch (direction!) { TextDirection.rtl => Alignment(_x - _start, _y), TextDirection.ltr => Alignment(_x + _start, _y), diff --git a/packages/flutter/test/painting/alignment_test.dart b/packages/flutter/test/painting/alignment_test.dart index 815723b1934..e8c63f6fd3b 100644 --- a/packages/flutter/test/painting/alignment_test.dart +++ b/packages/flutter/test/painting/alignment_test.dart @@ -4,6 +4,7 @@ import 'dart:math' as math; +import 'package:flutter/foundation.dart'; import 'package:flutter/painting.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -350,4 +351,35 @@ void main() { expect(AlignmentGeometry.bottomCenter, Alignment.bottomCenter); expect(AlignmentGeometry.bottomRight, Alignment.bottomRight); }); + + test('AlignmentDirectional.resolve with null TextDirection asserts', () { + const AlignmentDirectional alignmentDirectional = AlignmentDirectional(1.0, 2.0); + + expect( + () => alignmentDirectional.resolve(null), + throwsA( + isFlutterError.having( + (FlutterError e) => e.message, + 'message', + allOf(contains('No TextDirection found.'), contains('without a Directionality ancestor')), + ), + ), + ); + }); + + test('AlignmentDirectional.resolve with null TextDirection asserts', () { + const Alignment a = Alignment(5.0, 6.0); + const AlignmentDirectional b = AlignmentDirectional(15.0, 16.0); + + expect( + () => a.add(b).resolve(null), + throwsA( + isFlutterError.having( + (FlutterError e) => e.message, + 'message', + allOf(contains('No TextDirection found.'), contains('without a Directionality ancestor')), + ), + ), + ); + }); }