Skip to content

Conversation

@ahmedsameha1
Copy link
Contributor

This is my attempt to handle #6537 for the TabPageSelector 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 Nov 7, 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 an issue where TabPageSelector crashes when it has a zero size. The added test case is a good start, but it doesn't fully cover the scenario described in the issue, as it doesn't trigger a tab change. I've left a suggestion to improve the test to properly reproduce the crash condition. Additionally, the pull request seems to be missing the actual fix for the crash in TabPageSelector. Please ensure the fix is included before merging.

Comment on lines 9326 to 9339
testWidgets('TabPageSelector does not crash at zero area', (WidgetTester tester) async {
await tester.pumpWidget(
const MaterialApp(
home: Center(
child: SizedBox.shrink(child: DefaultTabController(length: 2, child: TabPageSelector())),
),
),
);
expect(tester.getSize(find.byType(TabPageSelector)), 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 verify that TabPageSelector doesn't crash when it has a zero size, which is great. However, the current implementation only checks the initial build state. The crash described in the associated issue occurs when changing tabs while the widget has zero area, because the TabController's animation might not run correctly.

To properly test for the regression, the test should also trigger a tab change to ensure the crash condition is covered.

  testWidgets('TabPageSelector does not crash at zero area when changing tabs', (WidgetTester tester) async {
    final TabController controller = TabController(length: 2, vsync: tester);
    addTearDown(controller.dispose);

    await tester.pumpWidget(
      MaterialApp(
        home: Center(
          child: SizedBox.shrink(
            child: TabPageSelector(controller: controller),
          ),
        ),
      ),
    );
    expect(tester.getSize(find.byType(TabPageSelector)), Size.zero);

    // Change the tab index to trigger the animation that could cause a crash.
    controller.animateTo(1);
    await tester.pump(); // Start animation.
    // The test passes if it doesn't crash here.
    await tester.pumpAndSettle();
  });

@ahmedsameha1 ahmedsameha1 force-pushed the handle#6537-TabPageSelector branch from cf8699a to 0ceb283 Compare November 7, 2025 13:27
Added tear down for tester view reset after test.
Copy link
Contributor

@victorsanni victorsanni left a comment

Choose a reason for hiding this comment

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

Hi, can you resolve the merge conflicts?

@victorsanni victorsanni added the autosubmit Merge PR when tree becomes green via auto submit App label Nov 19, 2025
@auto-submit auto-submit bot added this pull request to the merge queue Nov 19, 2025
Merged via the queue into flutter:master with commit 7a6d2fa Nov 19, 2025
76 checks passed
@flutter-dashboard flutter-dashboard bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Nov 19, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Nov 19, 2025
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Nov 19, 2025
flutter/flutter@cb7b7df...de4be4f

2025-11-19 [email protected] Roll Skia from 2054d87c6a85 to b5dc8c3494ac (1 revision) (flutter/flutter#178793)
2025-11-19 [email protected] Roll Skia from a30b02d57637 to 2054d87c6a85 (2 revisions) (flutter/flutter#178787)
2025-11-19 [email protected] Roll Skia from 547e3e5441b4 to a30b02d57637 (3 revisions) (flutter/flutter#178782)
2025-11-19 [email protected] Fix train hopping animation status listeners (flutter/flutter#178372)
2025-11-19 [email protected] Make sure that a ReorderableListView doesn't crash in 0x0 environment (flutter/flutter#177646)
2025-11-19 [email protected] Roll Skia from 9ce01a452f63 to 547e3e5441b4 (1 revision) (flutter/flutter#178775)
2025-11-19 [email protected] Roll Dart SDK from 1ed6b56bb323 to f7e9bd245fd9 (1 revision) (flutter/flutter#178774)
2025-11-19 [email protected] Roll Skia from f3ddc700abc7 to 9ce01a452f63 (8 revisions) (flutter/flutter#178769)
2025-11-19 [email protected] Make sure that a TabPageSelector doesn't crash in 0x0 environment (flutter/flutter#178156)
2025-11-19 [email protected] Small cleanup in `DeferredComponentManager.java‎` (flutter/flutter#178585)
2025-11-19 [email protected] Roll Dart SDK from a33149cb6643 to 1ed6b56bb323 (1 revision) (flutter/flutter#178763)
2025-11-18 [email protected] Roll Skia from 8557300f84c2 to f3ddc700abc7 (5 revisions) (flutter/flutter#178751)
2025-11-18 [email protected] Remove unnecessary `String.valueOf` in `TextInputChannel.java` (flutter/flutter#178592)
2025-11-18 [email protected] [tool] Further cleanup of proxy logic (flutter/flutter#178683)
2025-11-18 [email protected] Restore OpenGL state modified by fl_compositor_opengl_present_layers (flutter/flutter#178697)
2025-11-18 [email protected] Replace `equals("")` with `isEmpty` in `SpellCheckPlugin.java‎` (flutter/flutter#178596)
2025-11-18 [email protected] Roll Dart SDK from 312845b06afc to a33149cb6643 (2 revisions) (flutter/flutter#178738)
2025-11-18 [email protected] Roll Skia from ca906091e199 to 8557300f84c2 (2 revisions) (flutter/flutter#178739)
2025-11-18 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Add framework-side hitTestBehavior support for Semantics widget and apply to ModalRoute (#177570)" (flutter/flutter#178744)
2025-11-18 [email protected] Roll Packages from ce44ebb to 34746bb (6 revisions) (flutter/flutter#178734)

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
okorohelijah pushed a commit to okorohelijah/flutter that referenced this pull request Nov 21, 2025
IvoneDjaja pushed a commit to IvoneDjaja/flutter that referenced this pull request Nov 22, 2025
mboetger pushed a commit to mboetger/flutter that referenced this pull request Dec 2, 2025
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