Skip to content

Conversation

@ahmedsameha1
Copy link
Contributor

This is my attempt to handle #6537 for the InkResponse widget.

@github-actions github-actions bot added framework flutter/packages/flutter repository. See also f: labels. f: material design flutter/packages/flutter/material repository. labels Sep 16, 2025
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds a regression test for a crash involving a zero-sized InkResponse. The current test case correctly sets up a zero-sized InkResponse, but it does not trigger any interaction that would create an ink feature, which is the necessary condition to reproduce the crash. Consequently, the test would pass even without the corresponding fix. I have proposed a modification to the test to use autofocus on the InkResponse within a zero-sized Material widget. This creates a focus highlight and correctly exercises the code path that was causing the crash, ensuring the test is effective.

Comment on lines +2594 to +2604
testWidgets('InkResponse does not crash in zero area', (WidgetTester tester) async {
await tester.pumpWidget(
const MaterialApp(
home: Material(
child: Directionality(
textDirection: TextDirection.ltr,
child: Center(child: SizedBox.shrink(child: InkResponse())),
),
),
),
);
expect(tester.getSize(find.byType(InkResponse)), Size.zero);
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

This test case is intended to prevent a crash for a zero-sized InkResponse, but it doesn't actually trigger the condition that causes the crash. The crash occurs in _RenderInkFeatures.paint when it tries to clip a canvas with an empty size, which only happens if there are ink features to paint.

This test doesn't create any ink features because it doesn't interact with the InkResponse (e.g., via tap, focus, or hover). Therefore, the test will pass even without the fix.

To properly test the fix, we need to trigger the creation of an ink feature. A simple way to do this is to make the Material widget zero-sized and have an autofocus InkResponse as its child. This will create a focus highlight (InkHighlight), causing _RenderInkFeatures.paint to be called on a zero-sized render object, which reproduces the crash.

  testWidgets('InkResponse does not crash in zero area when focused', (WidgetTester tester) async {
    // Regression test for https://github.com/flutter/flutter/issues/6537
    FocusManager.instance.highlightStrategy = FocusHighlightStrategy.alwaysTraditional;

    await tester.pumpWidget(
      const Directionality(
        textDirection: TextDirection.ltr,
        child: SizedBox.shrink(
          child: Material(
            child: InkResponse(autofocus: true),
          ),
        ),
      ),
    );
    await tester.pump(); // Let focus take effect and trigger highlight.

    // The test passes if it doesn't crash.
  });

Copy link
Contributor

@dkwingsmt dkwingsmt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checklist:

  • The test is in the correct file
  • The test name goes “does not crash at zero area”
  • The target widget is wrapped by Center (or is fullscreen)
  • The target widget does not have an overlay, or the overlay is tested
  • The target widget is expected to have a size of exactly Size.zero

Copy link
Contributor

@MitchellGoodwin MitchellGoodwin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM as well!

@dkwingsmt dkwingsmt added the autosubmit Merge PR when tree becomes green via auto submit App label Sep 24, 2025
@auto-submit auto-submit bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Sep 24, 2025
@auto-submit
Copy link
Contributor

auto-submit bot commented Sep 24, 2025

autosubmit label was removed for flutter/flutter/175426, because - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label.

@dkwingsmt dkwingsmt force-pushed the handle#6537-InkResponse branch from a972f51 to 2053fcc Compare October 8, 2025 23:16
@dkwingsmt dkwingsmt added the autosubmit Merge PR when tree becomes green via auto submit App label Oct 8, 2025
@auto-submit auto-submit bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Oct 8, 2025
@auto-submit
Copy link
Contributor

auto-submit bot commented Oct 8, 2025

autosubmit label was removed for flutter/flutter/175426, because - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label.

@dkwingsmt dkwingsmt added the autosubmit Merge PR when tree becomes green via auto submit App label Oct 9, 2025
@auto-submit
Copy link
Contributor

auto-submit bot commented Oct 9, 2025

autosubmit label was removed for flutter/flutter/175426, because - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label.

@auto-submit auto-submit bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Oct 9, 2025
@dkwingsmt dkwingsmt added the autosubmit Merge PR when tree becomes green via auto submit App label Oct 10, 2025
@auto-submit auto-submit bot added this pull request to the merge queue Oct 10, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to a conflict with the base branch Oct 10, 2025
@flutter-dashboard flutter-dashboard bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Oct 10, 2025
@ahmedsameha1 ahmedsameha1 force-pushed the handle#6537-InkResponse branch from 678ccbf to 72d68cb Compare October 11, 2025 10:53
@dkwingsmt dkwingsmt added the autosubmit Merge PR when tree becomes green via auto submit App label Oct 16, 2025
@auto-submit auto-submit bot added this pull request to the merge queue Oct 16, 2025
Merged via the queue into flutter:master with commit 71d49b1 Oct 16, 2025
76 of 77 checks passed
@flutter-dashboard flutter-dashboard bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Oct 16, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Oct 17, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Oct 17, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Oct 17, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Oct 17, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Oct 18, 2025
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Oct 18, 2025
Roll Flutter from a873a27309b0 to 891d7d539256 (32 revisions)

flutter/flutter@a873a27...891d7d5

2025-10-18 [email protected] Roll Skia from b4981b621a54 to 74df18176924 (1 revision) (flutter/flutter#177204)
2025-10-18 [email protected] Roll Fuchsia Linux SDK from ZHuhfPyyV-LcKDLRh... to M8WT2GMY46e_0fFho... (flutter/flutter#177200)
2025-10-18 [email protected] [material/dropdown_menu.dart] Refactor  _RenderDropdownMenuBody.computeDryLayout  (flutter/flutter#176503)
2025-10-18 [email protected] Roll Skia from 579c72d673dd to b4981b621a54 (2 revisions) (flutter/flutter#177199)
2025-10-17 [email protected] Roll Skia from 89a8bc508a7c to 579c72d673dd (15 revisions) (flutter/flutter#177194)
2025-10-17 [email protected] [test_fixes] Enable `deprecated_member_use_from_same_package`. (flutter/flutter#177183)
2025-10-17 [email protected] [a11y] fix table semantics cache for cells  (flutter/flutter#177073)
2025-10-17 [email protected] [web] Self-cleaning service worker (flutter/flutter#176834)
2025-10-17 [email protected] Manual roll Skia from 2d9df7c70b6f to 89a8bc508a7c (24 revisions) (flutter/flutter#177182)
2025-10-17 [email protected] Fixing WindowManagerTest::DialogCanNeverBeFullscreen possibly hanging (flutter/flutter#177179)
2025-10-17 [email protected] [VPAT][A11y][a11y-app] Add a text label to slider.  (flutter/flutter#177130)
2025-10-17 [email protected] Manual roll Dart SDK from a4485e5ef821 to a66f334fee2a (5 revisions) (flutter/flutter#177142)
2025-10-17 [email protected] [web][a11y] Fix the semantics tree reconstruction logic when a subtree is reparented to another node.  (flutter/flutter#177069)
2025-10-17 [email protected] `SelectableRegion` should use flutter rendered menu on the web for Android and iOS (flutter/flutter#177122)
2025-10-17 [email protected] Refactor: Convert Title widget to StatefulWidget (flutter/flutter#176010)
2025-10-17 [email protected] Bump AGP, KGP, Gradle Templates (flutter/flutter#176858)
2025-10-17 [email protected] Roll Packages from 835dccb to 3747006 (3 revisions) (flutter/flutter#177170)
2025-10-17 [email protected] Mark windows_unopt test as flakey (flutter/flutter#177173)
2025-10-17 [email protected] Tapping outside of `SelectableRegion` should dismiss the selection (flutter/flutter#176843)
2025-10-17 [email protected] Roll Fuchsia Linux SDK from _dd0Jv50H0oUI2Ad8... to ZHuhfPyyV-LcKDLRh... (flutter/flutter#177137)
2025-10-17 [email protected] Manual roll Dart to a4485e5ef821 (3.11.0-25.0.dev) (flutter/flutter#177132)
2025-10-17 [email protected] Make sure that a MenuAcceleratorLabel doesn't crash in 0x0 environment (flutter/flutter#176646)
2025-10-16 [email protected] Make sure that a NavigationRail doesn't crash in 0x0 environment (flutter/flutter#177022)
2025-10-16 [email protected] Make sure that a SubmenuButton doesn't crash in 0x0 environment (flutter/flutter#176535)
2025-10-16 [email protected] Fix typo in ButtonBar documentation (flutter/flutter#177078)
2025-10-16 [email protected] Make sure that an InkResponse doesn't crash in 0x0 environment (flutter/flutter#175426)
2025-10-16 [email protected] [Gradle 9] Resolve Gradle 9 Deprecations in flutter/flutter part 1 (flutter/flutter#176865)
2025-10-16 [email protected] Revert "Resolve resolve native Flutter dependencies in Android Studio (#167332)" (flutter/flutter#177053)
2025-10-16 [email protected] Manual roll Dart SDK from 2d8e0359a767 to 25b6094026e4 (5 revisions) (flutter/flutter#177109)
2025-10-16 [email protected] Add textfield prop to SearchAnchor (flutter/flutter#174497)
2025-10-16 [email protected] Fix crash when NSAttributedString is passed to insertText on macOS (flutter/flutter#176329)
2025-10-16 [email protected] Correct basque time format (flutter/flutter#177031)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC [email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
...
reidbaker pushed a commit to AbdeMohlbi/flutter that referenced this pull request Dec 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

f: material design flutter/packages/flutter/material repository. framework flutter/packages/flutter repository. See also f: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants