这是indexloc提供的服务,不要输入任何密码
Skip to content

Conversation

@auto-submit
Copy link
Contributor

@auto-submit auto-submit bot commented Aug 15, 2025

Reverts: #169293

Initiated by: matanlurey

Reason for reverting: Does not work on Metal (iOS/macOS):

The following _Exception was thrown running a test:
Exception: Asset 'shaders/stretch_effect.frag' does not contain appropriate runtime stage data for current backend (Metal).

Original PR Author: MTtankkeo

Reviewed By: {dkwingsmt, justinmc, chunhtai}

This change reverts the following previous change:

Sorry, Closing PR #169196 and reopening this in a new PR for clarity and a cleaner commit history.

Fixes #82906

In the existing Flutter implementation, the Android stretch overscroll effect is achieved using Transform. However, this approach does not evenly stretch the screen as it does in the native Android environment. Therefore, in the Impeller environment, add or modify files to implement the effect using a fragment shader identical to the one used in native Android.

Note

  • The addition of a separate test file for StretchOverscrollEffect was not included because it would likely duplicate coverage already provided by the changes made in overscroll_stretch_indicator_test.dart within this PR.

However, since determining whether stretching occurred by referencing global coordinates is currently considered impossible with the new Fragment Shader approach, the code was modified to partially exclude the relevant test logic in the Impeller.

For reference, in the page_view_test.dart test, there was an issue with referencing the child Transform widget, but because the StretchOverscrollEffect widget is defined instead of the Transform widget in the Impeller environment, the code logic was adjusted accordingly.

  • Golden image tests were updated as the visual effect changes.

Reference Source

Old Skia (Using Transform)

old.mp4

New Impeller (Using fragment shader)

new.mp4

Pre-launch Checklist

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

@auto-submit auto-submit bot added the revert of Bot Only: Tracking label for bot. Tracks new revert of pull requests. label Aug 15, 2025
@github-actions github-actions bot added tool Affects the "flutter" command-line tool. See also t: labels. framework flutter/packages/flutter repository. See also f: labels. f: scrolling Viewports, list views, slivers, etc. labels Aug 15, 2025
@auto-submit auto-submit bot added this pull request to the merge queue Aug 15, 2025
Merged via the queue into master with commit 8bd06c0 Aug 15, 2025
10 of 11 checks passed
@auto-submit auto-submit bot deleted the revert_03736a282ebb4bc319bcdde5205cbd81ab7bbd14 branch August 15, 2025 18:35
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 16, 2025
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Aug 16, 2025
flutter/flutter@52af7a5...0a2906b

2025-08-16 31685655+SalehTZ@users.noreply.github.com Improve `SweepGradient` angle and `TileMode` documentation (flutter/flutter#172406)
2025-08-16 engine-flutter-autoroll@skia.org Roll Skia from 1e148cada9d4 to 16dbd908dcab (1 revision) (flutter/flutter#173901)
2025-08-16 engine-flutter-autoroll@skia.org Roll Skia from 91ad1f21ca61 to 1e148cada9d4 (3 revisions) (flutter/flutter#173890)
2025-08-16 engine-flutter-autoroll@skia.org Roll Dart SDK from 9277d6303da5 to 67ca79475db6 (1 revision) (flutter/flutter#173886)
2025-08-15 30870216+gaaclarke@users.noreply.github.com Blocks exynos9820 chip from vulkan (flutter/flutter#173807)
2025-08-15 41930132+hellohuanlin@users.noreply.github.com Revert "[ios][tools]do not log "bonjour not found" at all (unless verbose)" (flutter/flutter#173879)
2025-08-15 bkonyi@google.com Roll `package:analyzer` forward to `8.1.1` (flutter/flutter#173867)
2025-08-15 engine-flutter-autoroll@skia.org Roll Skia from 2f66be8a593a to 91ad1f21ca61 (3 revisions) (flutter/flutter#173877)
2025-08-15 jhy03261997@gmail.com [a11y] : set isFocused will update isFocusable to true (flutter/flutter#170935)
2025-08-15 jmccandless@google.com Reland predictive back route transitions by default (flutter/flutter#173860)
2025-08-15 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from zWRpLglb48zC1vZLv... to H1kVA85LyQsK8EDp2... (flutter/flutter#173874)
2025-08-15 lauraywu@google.com Add onHover callback support for TableRowInkWell (flutter/flutter#173373)
2025-08-15 engine-flutter-autoroll@skia.org Roll Skia from 5654ac32ede0 to 2f66be8a593a (6 revisions) (flutter/flutter#173866)
2025-08-15 engine-flutter-autoroll@skia.org Roll Dart SDK from cc008dc8e7aa to 9277d6303da5 (2 revisions) (flutter/flutter#173864)
2025-08-15 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Implements the Android native stretch effect as a fragment shader (Impeller-only). (#169293)" (flutter/flutter#173865)
2025-08-15 matanlurey@users.noreply.github.com Re-add `Linux_android_emu *` tests that had KVM issues, now resolved (flutter/flutter#173812)

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
ksokolovskyi pushed a commit to ksokolovskyi/flutter that referenced this pull request Aug 19, 2025
…hader (Impeller-only). (flutter#169293)" (flutter#173865)

<!-- start_original_pr_link -->
Reverts: flutter#169293
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: matanlurey
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Does not work on Metal (iOS/macOS):

```
The following _Exception was thrown running a test:
Exception: Asset 'shaders/stretch_effect.frag' does not contain appropriate runtime stage data for current backend (Metal).
```
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: MTtankkeo
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {dkwingsmt, justinmc, chunhtai}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
> Sorry, Closing PR flutter#169196 and reopening this in a new PR for clarity
and a cleaner commit history.

Fixes flutter#82906

In the existing Flutter implementation, the Android stretch overscroll
effect is achieved using Transform. However, this approach does not
evenly stretch the screen as it does in the native Android environment.
Therefore, in the Impeller environment, add or modify files to implement
the effect using a fragment shader identical to the one used in native
Android.

> [!NOTE]
> - The addition of a separate test file for StretchOverscrollEffect was
not included because it would likely duplicate coverage already provided
by the changes made in overscroll_stretch_indicator_test.dart within
this PR.
>> However, since determining whether stretching occurred by referencing
global coordinates is currently considered impossible with the new
Fragment Shader approach, the code was modified to partially exclude the
relevant test logic in the Impeller.
>>
>> For reference, in the page_view_test.dart test, there was an issue
with referencing the child Transform widget, but because the
StretchOverscrollEffect widget is defined instead of the Transform
widget in the Impeller environment, the code logic was adjusted
accordingly.
> 
> - Golden image tests were updated as the visual effect changes.

## Reference Source
-
https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/libs/hwui/effects/StretchEffect.cpp

## `Old` Skia (Using Transform)

https://github.com/user-attachments/assets/22d8ff96-d875-4722-bf6f-f0ad15b9077d

## `New` Impeller (Using fragment shader)

https://github.com/user-attachments/assets/73b6ef18-06b2-42ea-9793-c391ec2ce282

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
WillBLogical pushed a commit to WillBLogical/packages that referenced this pull request Aug 20, 2025
…r#9836)

flutter/flutter@52af7a5...0a2906b

2025-08-16 31685655+SalehTZ@users.noreply.github.com Improve `SweepGradient` angle and `TileMode` documentation (flutter/flutter#172406)
2025-08-16 engine-flutter-autoroll@skia.org Roll Skia from 1e148cada9d4 to 16dbd908dcab (1 revision) (flutter/flutter#173901)
2025-08-16 engine-flutter-autoroll@skia.org Roll Skia from 91ad1f21ca61 to 1e148cada9d4 (3 revisions) (flutter/flutter#173890)
2025-08-16 engine-flutter-autoroll@skia.org Roll Dart SDK from 9277d6303da5 to 67ca79475db6 (1 revision) (flutter/flutter#173886)
2025-08-15 30870216+gaaclarke@users.noreply.github.com Blocks exynos9820 chip from vulkan (flutter/flutter#173807)
2025-08-15 41930132+hellohuanlin@users.noreply.github.com Revert "[ios][tools]do not log "bonjour not found" at all (unless verbose)" (flutter/flutter#173879)
2025-08-15 bkonyi@google.com Roll `package:analyzer` forward to `8.1.1` (flutter/flutter#173867)
2025-08-15 engine-flutter-autoroll@skia.org Roll Skia from 2f66be8a593a to 91ad1f21ca61 (3 revisions) (flutter/flutter#173877)
2025-08-15 jhy03261997@gmail.com [a11y] : set isFocused will update isFocusable to true (flutter/flutter#170935)
2025-08-15 jmccandless@google.com Reland predictive back route transitions by default (flutter/flutter#173860)
2025-08-15 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from zWRpLglb48zC1vZLv... to H1kVA85LyQsK8EDp2... (flutter/flutter#173874)
2025-08-15 lauraywu@google.com Add onHover callback support for TableRowInkWell (flutter/flutter#173373)
2025-08-15 engine-flutter-autoroll@skia.org Roll Skia from 5654ac32ede0 to 2f66be8a593a (6 revisions) (flutter/flutter#173866)
2025-08-15 engine-flutter-autoroll@skia.org Roll Dart SDK from cc008dc8e7aa to 9277d6303da5 (2 revisions) (flutter/flutter#173864)
2025-08-15 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Implements the Android native stretch effect as a fragment shader (Impeller-only). (#169293)" (flutter/flutter#173865)
2025-08-15 matanlurey@users.noreply.github.com Re-add `Linux_android_emu *` tests that had KVM issues, now resolved (flutter/flutter#173812)

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
SydneyBao pushed a commit to SydneyBao/flutter that referenced this pull request Aug 22, 2025
…hader (Impeller-only). (flutter#169293)" (flutter#173865)

<!-- start_original_pr_link -->
Reverts: flutter#169293
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: matanlurey
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Does not work on Metal (iOS/macOS):

```
The following _Exception was thrown running a test:
Exception: Asset 'shaders/stretch_effect.frag' does not contain appropriate runtime stage data for current backend (Metal).
```
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: MTtankkeo
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {dkwingsmt, justinmc, chunhtai}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
> Sorry, Closing PR flutter#169196 and reopening this in a new PR for clarity
and a cleaner commit history.

Fixes flutter#82906

In the existing Flutter implementation, the Android stretch overscroll
effect is achieved using Transform. However, this approach does not
evenly stretch the screen as it does in the native Android environment.
Therefore, in the Impeller environment, add or modify files to implement
the effect using a fragment shader identical to the one used in native
Android.

> [!NOTE]
> - The addition of a separate test file for StretchOverscrollEffect was
not included because it would likely duplicate coverage already provided
by the changes made in overscroll_stretch_indicator_test.dart within
this PR.
>> However, since determining whether stretching occurred by referencing
global coordinates is currently considered impossible with the new
Fragment Shader approach, the code was modified to partially exclude the
relevant test logic in the Impeller.
>>
>> For reference, in the page_view_test.dart test, there was an issue
with referencing the child Transform widget, but because the
StretchOverscrollEffect widget is defined instead of the Transform
widget in the Impeller environment, the code logic was adjusted
accordingly.
> 
> - Golden image tests were updated as the visual effect changes.

## Reference Source
-
https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/libs/hwui/effects/StretchEffect.cpp

## `Old` Skia (Using Transform)

https://github.com/user-attachments/assets/22d8ff96-d875-4722-bf6f-f0ad15b9077d

## `New` Impeller (Using fragment shader)

https://github.com/user-attachments/assets/73b6ef18-06b2-42ea-9793-c391ec2ce282

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
SydneyBao pushed a commit to SydneyBao/flutter that referenced this pull request Aug 22, 2025
…hader (Impeller-only). (flutter#169293)" (flutter#173865)

<!-- start_original_pr_link -->
Reverts: flutter#169293
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: matanlurey
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Does not work on Metal (iOS/macOS):

```
The following _Exception was thrown running a test:
Exception: Asset 'shaders/stretch_effect.frag' does not contain appropriate runtime stage data for current backend (Metal).
```
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: MTtankkeo
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {dkwingsmt, justinmc, chunhtai}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
> Sorry, Closing PR flutter#169196 and reopening this in a new PR for clarity
and a cleaner commit history.

Fixes flutter#82906

In the existing Flutter implementation, the Android stretch overscroll
effect is achieved using Transform. However, this approach does not
evenly stretch the screen as it does in the native Android environment.
Therefore, in the Impeller environment, add or modify files to implement
the effect using a fragment shader identical to the one used in native
Android.

> [!NOTE]
> - The addition of a separate test file for StretchOverscrollEffect was
not included because it would likely duplicate coverage already provided
by the changes made in overscroll_stretch_indicator_test.dart within
this PR.
>> However, since determining whether stretching occurred by referencing
global coordinates is currently considered impossible with the new
Fragment Shader approach, the code was modified to partially exclude the
relevant test logic in the Impeller.
>>
>> For reference, in the page_view_test.dart test, there was an issue
with referencing the child Transform widget, but because the
StretchOverscrollEffect widget is defined instead of the Transform
widget in the Impeller environment, the code logic was adjusted
accordingly.
> 
> - Golden image tests were updated as the visual effect changes.

## Reference Source
-
https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/libs/hwui/effects/StretchEffect.cpp

## `Old` Skia (Using Transform)

https://github.com/user-attachments/assets/22d8ff96-d875-4722-bf6f-f0ad15b9077d

## `New` Impeller (Using fragment shader)

https://github.com/user-attachments/assets/73b6ef18-06b2-42ea-9793-c391ec2ce282

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
mboetger pushed a commit to mboetger/flutter that referenced this pull request Sep 18, 2025
…hader (Impeller-only). (flutter#169293)" (flutter#173865)

<!-- start_original_pr_link -->
Reverts: flutter#169293
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: matanlurey
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Does not work on Metal (iOS/macOS):

```
The following _Exception was thrown running a test:
Exception: Asset 'shaders/stretch_effect.frag' does not contain appropriate runtime stage data for current backend (Metal).
```
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: MTtankkeo
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {dkwingsmt, justinmc, chunhtai}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
> Sorry, Closing PR flutter#169196 and reopening this in a new PR for clarity
and a cleaner commit history.

Fixes flutter#82906

In the existing Flutter implementation, the Android stretch overscroll
effect is achieved using Transform. However, this approach does not
evenly stretch the screen as it does in the native Android environment.
Therefore, in the Impeller environment, add or modify files to implement
the effect using a fragment shader identical to the one used in native
Android.

> [!NOTE]
> - The addition of a separate test file for StretchOverscrollEffect was
not included because it would likely duplicate coverage already provided
by the changes made in overscroll_stretch_indicator_test.dart within
this PR.
>> However, since determining whether stretching occurred by referencing
global coordinates is currently considered impossible with the new
Fragment Shader approach, the code was modified to partially exclude the
relevant test logic in the Impeller.
>>
>> For reference, in the page_view_test.dart test, there was an issue
with referencing the child Transform widget, but because the
StretchOverscrollEffect widget is defined instead of the Transform
widget in the Impeller environment, the code logic was adjusted
accordingly.
> 
> - Golden image tests were updated as the visual effect changes.

## Reference Source
-
https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/libs/hwui/effects/StretchEffect.cpp

## `Old` Skia (Using Transform)

https://github.com/user-attachments/assets/22d8ff96-d875-4722-bf6f-f0ad15b9077d

## `New` Impeller (Using fragment shader)

https://github.com/user-attachments/assets/73b6ef18-06b2-42ea-9793-c391ec2ce282

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
korca0220 pushed a commit to korca0220/flutter that referenced this pull request Sep 22, 2025
…hader (Impeller-only). (flutter#169293)" (flutter#173865)

<!-- start_original_pr_link -->
Reverts: flutter#169293
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: matanlurey
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Does not work on Metal (iOS/macOS):

```
The following _Exception was thrown running a test:
Exception: Asset 'shaders/stretch_effect.frag' does not contain appropriate runtime stage data for current backend (Metal).
```
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: MTtankkeo
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {dkwingsmt, justinmc, chunhtai}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
> Sorry, Closing PR flutter#169196 and reopening this in a new PR for clarity
and a cleaner commit history.

Fixes flutter#82906

In the existing Flutter implementation, the Android stretch overscroll
effect is achieved using Transform. However, this approach does not
evenly stretch the screen as it does in the native Android environment.
Therefore, in the Impeller environment, add or modify files to implement
the effect using a fragment shader identical to the one used in native
Android.

> [!NOTE]
> - The addition of a separate test file for StretchOverscrollEffect was
not included because it would likely duplicate coverage already provided
by the changes made in overscroll_stretch_indicator_test.dart within
this PR.
>> However, since determining whether stretching occurred by referencing
global coordinates is currently considered impossible with the new
Fragment Shader approach, the code was modified to partially exclude the
relevant test logic in the Impeller.
>>
>> For reference, in the page_view_test.dart test, there was an issue
with referencing the child Transform widget, but because the
StretchOverscrollEffect widget is defined instead of the Transform
widget in the Impeller environment, the code logic was adjusted
accordingly.
> 
> - Golden image tests were updated as the visual effect changes.

## Reference Source
-
https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/libs/hwui/effects/StretchEffect.cpp

## `Old` Skia (Using Transform)

https://github.com/user-attachments/assets/22d8ff96-d875-4722-bf6f-f0ad15b9077d

## `New` Impeller (Using fragment shader)

https://github.com/user-attachments/assets/73b6ef18-06b2-42ea-9793-c391ec2ce282

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Nov 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

f: scrolling Viewports, list views, slivers, etc. framework flutter/packages/flutter repository. See also f: labels. revert of Bot Only: Tracking label for bot. Tracks new revert of pull requests. tool Affects the "flutter" command-line tool. See also t: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Re-implement stretch overscroll behavior as a custom shader

3 participants