Skip to content

Conversation

@hello-coder-xu
Copy link
Contributor

Fixed #146986

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

@github-actions github-actions bot added the framework flutter/packages/flutter repository. See also f: labels. label May 23, 2024
@hello-coder-xu
Copy link
Contributor Author

@Piinks Please check it out

@goderbauer goderbauer requested a review from Piinks June 4, 2024 22:09
Copy link
Contributor

@Piinks Piinks left a comment

Choose a reason for hiding this comment

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

Can you update the PR description to provide some context on why this is the right fix?

* master: (181 commits)
  Fix the scrolling layout deviation of `CupertinoActionSheet` (flutter#149439)
  Roll Flutter Engine from 60a7bb2 to a6aa5d8 (2 revisions) (flutter#149627)
  Roll Flutter Engine from ea72558 to 60a7bb2 (2 revisions) (flutter#149623)
  Place `flutter_gpu` in the package cache. (flutter#149299)
  Switch to triage-* labels for platform package triage (flutter#149614)
  Roll pub packages (flutter#149617)
  Fixes multi line textfield hint text gets ellipsized (flutter#148423)
  Support failures-only and silent reporters in `flutter test` (flutter#148739)
  [CupertinoActionSheet] Fix overflow of the overscroll section when the user scrolls far (flutter#149542)
  Fix InputDecorator.prefixIcon color when disabled (flutter#149595)
  Added filter callback on dropdown menu (flutter#143939)
  update generated localized message files in the stocks test app (flutter#148741)
  Add a simplified SimpleCascadingMenuApp example (flutter#149147)
  Reland "Prevent LayoutBuilder from rebuilding more than once (flutter#147856)" (flutter#149303)
  Move some benchmarks from MotoG4 to Mokey (flutter#149567)
  Roll Packages from d8e8e8c to 11e192a (2 revisions) (flutter#149596)
  Cleanup triage reports from docs/ (flutter#149545)
  Roll Flutter Engine from d81edf6 to ea72558 (1 revision) (flutter#149590)
  Roll Flutter Engine from b0f4d74 to d81edf6 (1 revision) (flutter#149468)
  Roll Flutter Engine from 40b868e to b0f4d74 (1 revision) (flutter#149467)
  ...
@hello-coder-xu
Copy link
Contributor Author

Can you update the PR description to provide some context on why this is the right fix?

i added,please check

@goderbauer goderbauer requested a review from Piinks June 12, 2024 22:11
@hello-coder-xu
Copy link
Contributor Author

why this pr can fixed #146986

Before determining the content size of the page view, _minScrollExtent and _maxScrollExtent are empty. At this time, getting the page value will trigger an assertion.

Added !haveDimensions conditional judgment, which can get the page value before determining the content size of the page view without throwing an assertion

If the page view itself has not determined the size and the page value is obtained, an assertion should still be thrown

@hello-coder-xu
Copy link
Contributor Author

Two tests failed, I'll deal with them later

* master: (213 commits)
  Fix: Memory leak in UndoHistory widget because it never de-registered itself as global UndoManager client (Resolves flutter#148291) (flutter#150661)
  [CupertinoActionSheet] Fix the layout (part 1) (flutter#149636)
  Remove discontinued `device_info` and `connectivity` plugins from `flutter_gallery`, roll pub packages (flutter#150585)
  [a11y] Update semantics in bottom_navigation_bar.dart (flutter#150576)
  Roll Flutter Engine from dda82d9 to 33415c6 (7 revisions) (flutter#150637)
  Reland 4: [CupertinoActionSheet] Match colors to native (flutter#150442)
  Enable SelectionArea double tap/triple tap gesture support for mobile platforms (flutter#149295)
  made SelectionArea alignment consistent between web and other platform (flutter#150037)
  Fix link hook typo (flutter#150194)
  Stop looking for .packages when analyzing (flutter#150349)
  Update flutter.dev links from misc packages to more permanent destinations (flutter#150532)
  Roll Flutter Engine from dd37cef to dda82d9 (9 revisions) (flutter#150582)
  Update Material token to the latest 4.1.0 (flutter#150382)
  Let the lockfile script generate lockfiles for kotlin gradle files as well (flutter#150471)
  Make popup menu hardcoded padding configurable (flutter#150506)
  [flutter_tools] un-hide the --dds flag (flutter#150280)
  [material/menu_anchor.dart] Remove _MenuAnchorState from parent when disposed. (flutter#149586)
  Add test for inherited_notifier.0.dart (flutter#150344)
  [CLI tool] in `flutter test`, consider `--flavor` when validating the cached asset bundle (flutter#150461)
  Test InputDecoration API examples (flutter#148560)
  ...
@hello-coder-xu
Copy link
Contributor Author

@Piinks The description and test case issues of the PR have been resolved, please check again

* master: (23 commits)
  Roll pub packages (flutter#150810)
  Remove reference to `MaterialApp` and `showCupertinoModalPopup` from `CupertinoAlertDialog` (flutter#150725)
  Read `AndroidManifest.xml` and emit `manifest-impeller-(enabled|disabled)` analytics (flutter#150791)
  [flutter_tools] Shut down Chromium cleanly using a command sent through the debug protocol (flutter#150645)
  Reland fix inputDecorator hint color on M3 (flutter#150278)
  Roll Flutter Engine from 62e0b5f to 94023d7 (7 revisions) (flutter#150797)
  Fix collapsed InputDecorator minimum height (flutter#150770)
  Add more warm up frame docs (flutter#150464)
  Roll pub packages (flutter#150739)
  Add `focusNode`, `focusColor`, `onFocusChange`, `autofocus` to `CupertinoButton` (flutter#150721)
  Document RenderObject._relayoutBoundary and its invariant; small refactors (flutter#150527)
  Roll Flutter Engine from 6313b1e to 62e0b5f (1 revision) (flutter#150790)
  fix a typo (flutter#150682)
  Fix link in RenderObjectWidget doc comment (flutter#150600)
  Roll Flutter Engine from fbd9205 to 6313b1e (1 revision) (flutter#150781)
  [tool] make `ErrorHandlingFileSystem.deleteIfExists` catch error code 3 (`ERROR_PATH_NOT_FOUND` on Windows) (flutter#150741)
  Roll Packages from 711b4ac to 03f5f6d (21 revisions) (flutter#150779)
  Roll Flutter Engine from afa7ce1 to fbd9205 (1 revision) (flutter#150777)
  Reland Add tests for form_text_field.1.dart (flutter#150481) (flutter#150696) (flutter#150750)
  Add an example for CupertinoPopupSurface (flutter#150357)
  ...
Copy link
Contributor

@Piinks Piinks left a comment

Choose a reason for hiding this comment

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

LGTM

Copy link
Contributor

@nate-thegrate nate-thegrate left a comment

Choose a reason for hiding this comment

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

This looks great overall—thanks for contributing the bugfix!

Comment on lines 390 to 392
);
return !hasPixels || !hasContentDimensions
return !hasPixels || !(hasContentDimensions || haveDimensions)
? null
: _cachedPage ?? getPageFromPixels(clampDouble(pixels, minScrollExtent, maxScrollExtent), viewportDimension);
Copy link
Contributor

Choose a reason for hiding this comment

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

I think we could tweak the boolean logic here to make it easier to follow:

return hasPixels && (hasContentDimensions || haveDimensions)
    ? _cachedPage ?? getPageFromPixels(clampDouble(...), viewportDimension)
    : null;

Alternatively, we could put a guard statement at the beginning to simplify both the assert and the return statement:

double? get page {
  if (!hasPixels) {
    return null;
  }
  assert(
    hasContentDimensions || !haveDimensions,
    'Page value is only available after content dimensions are established.',
  );
  return hasContentDimensions || haveDimensions
      ? _cachedPage ?? getPageFromPixels(clampDouble(...), viewportDimension)
      : null;
}

});
});

testWidgets('Get the page value before the content dimension is determined,do not throw an assertion and return null', (WidgetTester tester) async {
Copy link
Contributor

@nate-thegrate nate-thegrate Jul 2, 2024

Choose a reason for hiding this comment

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

Thanks for adding this test, it looks great!

I have a small wording suggestion
(Edit: I guess the top priority at this point is to figure out why this test is failing.)

@nate-thegrate
Copy link
Contributor

It looks like the test added by this PR is failing:

══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK ╞════════════════════════════════════════════════════
The following TestFailure was thrown running a test:
Expected: exactly one matching candidate
  Actual: _TextWidgetFinder:<Found 0 widgets with text "not empty": []>
   Which: means none were found but one was expected

When the exception was thrown, this was the stack:
#4      main.<anonymous closure> (flutter/packages/flutter/test/widgets/page_view_test.dart:1402:5)
<asynchronous suspension>
#5      testWidgets.<anonymous closure>.<anonymous closure> (package:flutter_test/src/widget_tester.dart:183:15)
<asynchronous suspension>
#6      TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:1025:5)
<asynchronous suspension>
<asynchronous suspension>
(elided one frame from package:stack_trace)

This was caught by the test expectation on the following line:
  file:///b/s/w/ir/x/w/flutter/packages/flutter/test/widgets/page_view_test.dart line 1402
The test description was:
  Get the page value before the content dimension is determined,do not throw an assertion and return
  null
════════════════════════════════════════════════════════════════════════════════════════════════════

Even after another frame is pumped, it appears that the value of hasPixels && (hasContentDimensions || haveDimensions) is false.

@Piinks
Copy link
Contributor

Piinks commented Jul 2, 2024

Oh that is my fault likely. I fiddled with the test to avoid another round of back and forth. Let me take a look.


await tester.pump();
currentPage = controller.page == null ? 'null' : 'not empty';
expect(find.text('not empty'), findsOneWidget);
Copy link
Contributor

Choose a reason for hiding this comment

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

Hmm, actually it looks like we may have found a bug in adjusting this test. @hello-coder-xu can you take a look?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Reason for test failure: The page is not refreshed after await tester.pump(), and text is still displayed as null. The view needs to be updated before the test can pass normally.

* master: (88 commits)
  Fix scheduler event loop being stuck due to task with Priority.idle (flutter#151168)
  Fix result propagation in RenderSliverEdgeInsetsPadding.hitTestChildren (flutter#149825)
  docImports for flutter_test (flutter#151189)
  Interactable ScrollView content when settling a scroll activity (flutter#145848)
  [flutter_tools] Update the mapping for the Dart SDK internal URI (flutter#151170)
  Roll pub packages (flutter#151129)
  Fix typo (flutter#151192)
  [tool] Fix `stdin.flush` calls on processes started by `FakeProcessManager` (flutter#151183)
  Roll Flutter Engine from 433d360 to 4427894 (4 revisions) (flutter#151186)
  Use `ErrorHandlingFileSystem.deleteIfExists` when deleting .plugin_symlinks (flutter#151073)
  ScrollEndNotification example: auto-scroll based on RenderSliver constraints and geometry (flutter#143538)
  Roll Packages from 412ec46 to d2705fb (13 revisions) (flutter#151169)
  docimports for painting (flutter#151143)
  docimports for scheduler (flutter#151126)
  `dismissible.dart` code cleanup (flutter#150276)
  docimports for physics (flutter#151125)
  docimports for services (flutter#151134)
  docimports for cupertino (flutter#151149)
  docimports for gestures (flutter#151123)
  Docimports for foundation (flutter#151119)
  ...
Copy link
Contributor

@nate-thegrate nate-thegrate left a comment

Choose a reason for hiding this comment

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

LGTM, great work here!

@nate-thegrate nate-thegrate added the autosubmit Merge PR when tree becomes green via auto submit App label Jul 3, 2024
@auto-submit auto-submit bot merged commit 7b69688 into flutter:master Jul 3, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 3, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 3, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 4, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 4, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 4, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 4, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 5, 2024
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 5, 2024
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Jul 7, 2024
Roll Flutter from af913a7 to fafd67d (41 revisions)

flutter/flutter@af913a7...fafd67d

2024-07-05 engine-flutter-autoroll@skia.org Roll Flutter Engine from 74d40c160e48 to 4ee09d3b7f3b (1 revision) (flutter/flutter#151346)
2024-07-05 engine-flutter-autoroll@skia.org Roll Flutter Engine from ba9c7b6336ef to 74d40c160e48 (1 revision) (flutter/flutter#151340)
2024-07-05 engine-flutter-autoroll@skia.org Roll Flutter Engine from 1f0f950ea02a to ba9c7b6336ef (1 revision) (flutter/flutter#151331)
2024-07-05 engine-flutter-autoroll@skia.org Roll Flutter Engine from 3c6a373bda3e to 1f0f950ea02a (1 revision) (flutter/flutter#151326)
2024-07-04 engine-flutter-autoroll@skia.org Roll Flutter Engine from 79a91e38c587 to 3c6a373bda3e (2 revisions) (flutter/flutter#151318)
2024-07-04 engine-flutter-autoroll@skia.org Roll Packages from d2705fb to 754de19 (3 revisions) (flutter/flutter#151315)
2024-07-04 engine-flutter-autoroll@skia.org Roll Flutter Engine from 2b6bb516e7e6 to 79a91e38c587 (2 revisions) (flutter/flutter#151314)
2024-07-04 engine-flutter-autoroll@skia.org Roll Flutter Engine from 8e2d05fa95d7 to 2b6bb516e7e6 (2 revisions) (flutter/flutter#151299)
2024-07-04 engine-flutter-autoroll@skia.org Roll Flutter Engine from 4190543cb093 to 8e2d05fa95d7 (13 revisions) (flutter/flutter#151293)
2024-07-03 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#151203)
2024-07-03 Dispersia@users.noreply.github.com Fix invalid URL suggestion for gradle incompatability (flutter/flutter#150999)
2024-07-03 423393+veloce@users.noreply.github.com Cupertino transparent navigation bars (flutter/flutter#149102)
2024-07-03 1961493+harryterkelsen@users.noreply.github.com Prepares semantics_update_test for upcoming link URL change (flutter/flutter#151261)
2024-07-03 nate.w5687@gmail.com Add a message about spam/brigading (flutter/flutter#150583)
2024-07-03 hans.muller@gmail.com PinnedHeaderSliver example based on the iOS Settings AppBar (flutter/flutter#151205)
2024-07-03 katelovett@google.com Update deprecation policy (flutter/flutter#151257)
2024-07-03 hans.muller@gmail.com SliverFloatingHeader (flutter/flutter#151145)
2024-07-03 34871572+gmackall@users.noreply.github.com Remove warning when KGP version not detected (flutter/flutter#151254)
2024-07-03 34465683+rkishan516@users.noreply.github.com Feat: Add withOpacity to gradient (flutter/flutter#150670)
2024-07-03 goderbauer@google.com Fix references in examples (flutter/flutter#151204)
2024-07-03 82763757+NobodyForNothing@users.noreply.github.com Fix link in tree hygene doc (flutter/flutter#151235)
2024-07-03 yinxulolol@gmail.com content dimensions are not established get controller value error (flutter/flutter#148938)
2024-07-03 michaleli@foxmail.com chore: fix typos and link broken (flutter/flutter#150402)
2024-07-03 dev@alestiago.com Add example of goldenFileComparator usage in widget tests (flutter/flutter#150422)
2024-07-03 brackenavaron@gmail.com Fix project name fallback (flutter/flutter#150614)
2024-07-03 engine-flutter-autoroll@skia.org Roll Flutter Engine from a3e61c0fd1c2 to 4190543cb093 (1 revision) (flutter/flutter#151241)
2024-07-03 engine-flutter-autoroll@skia.org Roll Flutter Engine from 8274f54f11be to a3e61c0fd1c2 (2 revisions) (flutter/flutter#151237)
2024-07-03 jason-simmons@users.noreply.github.com Force regeneration of platform-specific manifests before running performance tests (flutter/flutter#151003)
2024-07-03 jason-simmons@users.noreply.github.com Handle a SocketException thrown when sending the browser close command to Chrome (flutter/flutter#151197)
2024-07-03 engine-flutter-autoroll@skia.org Roll Flutter Engine from a02e3f673da3 to 8274f54f11be (4 revisions) (flutter/flutter#151226)
2024-07-03 engine-flutter-autoroll@skia.org Roll Flutter Engine from c5c0c54d6d1d to a02e3f673da3 (1 revision) (flutter/flutter#151212)
2024-07-03 engine-flutter-autoroll@skia.org Roll Flutter Engine from 44278941443e to c5c0c54d6d1d (9 revisions) (flutter/flutter#151208)
2024-07-02 jon@jon.sg Fix scheduler event loop being stuck due to task with Priority.idle (flutter/flutter#151168)
2024-07-02 matej.knopp@gmail.com Fix result propagation in RenderSliverEdgeInsetsPadding.hitTestChildren (flutter/flutter#149825)
2024-07-02 goderbauer@google.com docImports for flutter_test (flutter/flutter#151189)
2024-07-02 Michal-MK@users.noreply.github.com Interactable ScrollView content when settling a scroll activity (flutter/flutter#145848)
2024-07-02 danny@tuppeny.com [flutter_tools] Update the mapping for the Dart SDK internal URI (flutter/flutter#151170)
2024-07-02 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#151129)
2024-07-02 36861262+QuncCccccc@users.noreply.github.com Fix typo (flutter/flutter#151192)
2024-07-02 andrewrkolos@gmail.com [tool] Fix `stdin.flush` calls on processes started by `FakeProcessManager` (flutter/flutter#151183)
2024-07-02 engine-flutter-autoroll@skia.org Roll Flutter Engine from 433d360eee11 to 44278941443e (4 revisions) (flutter/flutter#151186)

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 camillesimon@google.com,rmistry@google.com,stuartmorgan@google.com on the revert to ensure that a human
...
victorsanni pushed a commit to victorsanni/flutter that referenced this pull request Jul 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmit Merge PR when tree becomes green via auto submit App framework flutter/packages/flutter repository. See also f: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants