• LongCatIsLooong's avatar
    Make `TextSpan` hit testing precise. (#139717) · ea5b9728
    LongCatIsLooong authored
    Fixes https://github.com/flutter/flutter/issues/131435, #104594, #43400
    Needs https://github.com/flutter/engine/pull/48774 (to fix the web test failure).
    
    Currently the method we use for text span hit testing `TextPainter.getPositionForOffset` always returns the closest `TextPosition`, even when the given offset is far away from the text. 
    
    The new TextPaintes method tells you the layout bounds (`width =  letterspacing / 2 + x_advance + letterspacing / 2`, `height = font ascent + font descent`) of a character, the PR changes the hit testing implementation such that a TextSpan is only considered hit if the point-down event landed in one of it's character's layout bounds.
    
    Potential issues:
    
    1. In theory since the text is baseline aligned, we should use the max ascent and max descent of each character to calculate the height of the text span's hit-test region, in case some characters in the span have to fall back to a different font, but that will be slower and it typically doesn't make a huge difference. 
    
    This is a breaking change. It also introduces a new finder and a new method `WidgetTester.tapOnText`: `await tester.tapOnText('string to match')` for ease of migration.
    ea5b9728
Name
Last commit
Last update
..
_network_image_test_web.dart Loading commit data...
_network_image_web_test_io.dart Loading commit data...
_test_http_request.dart Loading commit data...
alignment_test.dart Loading commit data...
beveled_rectangle_border_test.dart Loading commit data...
binding_test.dart Loading commit data...
border_radius_test.dart Loading commit data...
border_rtl_test.dart Loading commit data...
border_side_test.dart Loading commit data...
border_test.dart Loading commit data...
box_decoration_test.dart Loading commit data...
box_fit_test.dart Loading commit data...
box_painter_test.dart Loading commit data...
circle_border_test.dart Loading commit data...
colors_test.dart Loading commit data...
common_matchers.dart Loading commit data...
continuous_rectangle_border_test.dart Loading commit data...
decoration_image_lerp_test.dart Loading commit data...
decoration_test.dart Loading commit data...
edge_insets_test.dart Loading commit data...
fake_codec.dart Loading commit data...
fake_image_provider.dart Loading commit data...
flutter_logo_test.dart Loading commit data...
fractional_offset_test.dart Loading commit data...
geometry_test.dart Loading commit data...
gradient_test.dart Loading commit data...
image_cache_binding_test.dart Loading commit data...
image_cache_clearing_test.dart Loading commit data...
image_cache_resize_test.dart Loading commit data...
image_cache_test.dart Loading commit data...
image_decoder_test.dart Loading commit data...
image_info_test.dart Loading commit data...
image_provider_and_image_cache_test.dart Loading commit data...
image_provider_network_image_test.dart Loading commit data...
image_provider_resize_image_test.dart Loading commit data...
image_provider_test.dart Loading commit data...
image_resolution_test.dart Loading commit data...
image_stream_test.dart Loading commit data...
image_test_utils.dart Loading commit data...
linear_border_test.dart Loading commit data...
matrix_utils_test.dart Loading commit data...
mocks_for_image_cache.dart Loading commit data...
network_image_web_test.dart Loading commit data...
notched_shapes_test.dart Loading commit data...
oval_border_test.dart Loading commit data...
paint_image_test.dart Loading commit data...
painting_utils.dart Loading commit data...
rounded_rectangle_border_test.dart Loading commit data...
shader_warm_up_test.dart Loading commit data...
shape_border_test.dart Loading commit data...
shape_decoration_test.dart Loading commit data...
stadium_border_test.dart Loading commit data...
star_border_test.dart Loading commit data...
strut_style_test.dart Loading commit data...
system_fonts_test.dart Loading commit data...
text_painter_rtl_test.dart Loading commit data...
text_painter_test.dart Loading commit data...
text_scaler_test.dart Loading commit data...
text_span_test.dart Loading commit data...
text_style_test.dart Loading commit data...