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 engine-flutter-autoroll@skia.org Roll Skia from 2054d87c6a85 to b5dc8c3494ac (1 revision) (flutter/flutter#178793)
2025-11-19 engine-flutter-autoroll@skia.org Roll Skia from a30b02d57637 to 2054d87c6a85 (2 revisions) (flutter/flutter#178787)
2025-11-19 engine-flutter-autoroll@skia.org Roll Skia from 547e3e5441b4 to a30b02d57637 (3 revisions) (flutter/flutter#178782)
2025-11-19 sokolovskyi.konstantin@gmail.com Fix train hopping animation status listeners (flutter/flutter#178372)
2025-11-19 ahmedsameha1@gmail.com Make sure that a ReorderableListView doesn't crash in 0x0 environment (flutter/flutter#177646)
2025-11-19 engine-flutter-autoroll@skia.org Roll Skia from 9ce01a452f63 to 547e3e5441b4 (1 revision) (flutter/flutter#178775)
2025-11-19 engine-flutter-autoroll@skia.org Roll Dart SDK from 1ed6b56bb323 to f7e9bd245fd9 (1 revision) (flutter/flutter#178774)
2025-11-19 engine-flutter-autoroll@skia.org Roll Skia from f3ddc700abc7 to 9ce01a452f63 (8 revisions) (flutter/flutter#178769)
2025-11-19 ahmedsameha1@gmail.com Make sure that a TabPageSelector doesn't crash in 0x0 environment (flutter/flutter#178156)
2025-11-19 116356835+AbdeMohlbi@users.noreply.github.com Small cleanup in `DeferredComponentManager.java‎` (flutter/flutter#178585)
2025-11-19 engine-flutter-autoroll@skia.org Roll Dart SDK from a33149cb6643 to 1ed6b56bb323 (1 revision) (flutter/flutter#178763)
2025-11-18 engine-flutter-autoroll@skia.org Roll Skia from 8557300f84c2 to f3ddc700abc7 (5 revisions) (flutter/flutter#178751)
2025-11-18 116356835+AbdeMohlbi@users.noreply.github.com Remove unnecessary `String.valueOf` in `TextInputChannel.java` (flutter/flutter#178592)
2025-11-18 kevmoo@users.noreply.github.com [tool] Further cleanup of proxy logic (flutter/flutter#178683)
2025-11-18 jason-simmons@users.noreply.github.com Restore OpenGL state modified by fl_compositor_opengl_present_layers (flutter/flutter#178697)
2025-11-18 116356835+AbdeMohlbi@users.noreply.github.com Replace `equals("")` with `isEmpty` in `SpellCheckPlugin.java‎` (flutter/flutter#178596)
2025-11-18 engine-flutter-autoroll@skia.org Roll Dart SDK from 312845b06afc to a33149cb6643 (2 revisions) (flutter/flutter#178738)
2025-11-18 engine-flutter-autoroll@skia.org 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 engine-flutter-autoroll@skia.org 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 louisehsu@google.com,stuartmorgan@google.com 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
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