-
Notifications
You must be signed in to change notification settings - Fork 28.7k
Remove Editable.onCaretChanged callback #109114
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
It looks like this pull request may not have tests. Please make sure to add tests before merging. If you need an exemption to this rule, contact Hixie on the #hackers channel in Chat (don't just cc him here, he won't see it! He's on Discord!). If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix? Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. |
/cc @LongCatIsLooong |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for looking into this! Some changes could be breaking. Let's see if we can isolate the breaking changes if there's any.
// TODO(LongCatIsLooong): skip painting the caret when the selection is | ||
// (-1, -1). | ||
if (selection == null || !selection.isCollapsed) { | ||
if (selection == null || !selection.isValid || !selection.isCollapsed) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the reason there's a TODO is this is a breaking change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It still is a breaking change. It seems currently with an invalid selection the caret will painted at TextRange(0, 0)
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've tried to trigger the "Google tests" check, which will help us see if this breaks Google's internal tests. I'm never sure if the PR needs to be approved or not before that will start... Let's see if it shows up.
If it's not a bad breaking change then I'm on board with this, seems cleaner to me.
@@ -3670,7 +3670,7 @@ void main() { | |||
|
|||
// The ListView has scrolled to keep the TextField and cursor handle | |||
// visible. | |||
expect(scrollController.offset, 26.0); | |||
expect(scrollController.offset, 28.0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do all these values need to change by 2 pixels?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So this got me slightly puzzled. My semi-educated guess is that this is because in _FloatingCursorPainter.paintRegularCursor() there's two things going on:
- Small per-platform adjustments:
final double? caretHeight = renderEditable._textPainter.getFullHeightForCaret(textPosition, caretPrototype);
[...]
caretRect = Rect.fromLTWH(
- then, a bit of shifting:
caretRect = caretRect.shift(renderEditable._paintOffset);
final Rect integralRect = caretRect.shift(renderEditable._snapToPhysicalPixel(caretRect.topLeft));
[...]
caretPaintCallback(integralRect);
It's probably because of 1. - not sure why this was only done in the paint routine and not in getLocalRectForCaret(). Maybe a topic for another PR to clean it up.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems to cause some internal golden images to show up differently too. Maybe replace the code in getLocalRectForCaret
with the implementation here for now?
// TODO(LongCatIsLooong): skip painting the caret when the selection is | ||
// (-1, -1). | ||
if (selection == null || !selection.isCollapsed) { | ||
if (selection == null || !selection.isValid || !selection.isCollapsed) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It still is a breaking change. It seems currently with an invalid selection the caret will painted at TextRange(0, 0)
.
if (_currentCaretRect == null || !_scrollController.hasClients) { | ||
final RenderEditable? renderEditable = | ||
_editableKey.currentContext?.findRenderObject() as RenderEditable?; | ||
if (!(renderEditable?.selection?.isValid ?? false) || !_scrollController.hasClients) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: if (renderEditable == null || !renderEditable.selection.isValid || ...)
to promote renderEditable
to non-null. Slightly easier to read too.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This now became a 3-liner but I agree it's easier to read:
if (renderEditable == null
|| !(renderEditable.selection?.isValid ?? false)
|| !_scrollController.hasClients) {
@@ -3670,7 +3670,7 @@ void main() { | |||
|
|||
// The ListView has scrolled to keep the TextField and cursor handle | |||
// visible. | |||
expect(scrollController.offset, 26.0); | |||
expect(scrollController.offset, 28.0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems to cause some internal golden images to show up differently too. Maybe replace the code in getLocalRectForCaret
with the implementation here for now?
Hello @tgucio, this pull request still has some internal golden test failures. Do you have plans to remove the code changes that could potentially cause the failures (see the comments above)? Note to myself: TAP run: 467947880/OCL:467947880:BASE:475669971:1663713141112:da7081f1 |
@LongCatIsLooong yes, I plan to revisit this PR this week and look at having a single method to compute the caret height for scroll and paint. |
Just the |
@LongCatIsLooong I've submitted a PR to add this to the breaking change notes: flutter/website#8916 |
BTW, the Google test is still failing - not sure if it will be updated or it's OK to merge as is. |
There's no additional google testing failures. Feel free to merge once flutter/website#8916 gets LGTM'd. You may have to merge it manually. The google testing failures are 3 golden image changes and they look like improvements to me so I think the images need to be updated. |
Breaking change note for flutter/flutter#109114 ## Presubmit checklist - [x] This PR doesn’t contain automatically generated corrections (Grammarly or similar). - [x] This PR follows the [Google Developer Documentation Style Guidelines](https://developers.google.com/style) — for example, it doesn’t use _i.e._ or _e.g._, and it avoids _I_ and _we_ (first person). - [x] This PR uses [semantic line breaks](https://github.com/dart-lang/site-shared/blob/main/doc/writing-for-dart-and-flutter-websites.md#semantic-line-breaks) of 80 characters or fewer. --------- Co-authored-by: Shams Zakhour (ignore Sfshaza) <44418985+sfshaza2@users.noreply.github.com> Co-authored-by: Anthony Sansone <atsansone@users.noreply.github.com>
Roll Flutter from 96a2c05 to 51bef1b (37 revisions) flutter/flutter@96a2c05...51bef1b 2023-06-28 engine-flutter-autoroll@skia.org Roll Flutter Engine from e8a1c23d66ba to 241ca5c1d6be (1 revision) (flutter/flutter#129725) 2023-06-28 parlough@gmail.com Update analysis, linter, and repo links in analysis options (flutter/flutter#129686) 2023-06-28 engine-flutter-autoroll@skia.org Roll Flutter Engine from be1073aa352f to e8a1c23d66ba (1 revision) (flutter/flutter#129723) 2023-06-28 hans.muller@gmail.com Dev, examples/api, etc updated for Material 3 by default (flutter/flutter#129683) 2023-06-28 tessertaha@gmail.com Add `DatePickerTheme.inputDecorationTheme` for the DatePicker with input mode. (flutter/flutter#128950) 2023-06-28 jonahwilliams@google.com [framework] ensure flexible space bar fades when scrolling. (flutter/flutter#129527) 2023-06-28 leroux_bruno@yahoo.fr Add InputDecorator.error to allow error message customization (flutter/flutter#129275) 2023-06-28 engine-flutter-autoroll@skia.org Roll Flutter Engine from b388e852be44 to be1073aa352f (1 revision) (flutter/flutter#129712) 2023-06-28 engine-flutter-autoroll@skia.org Roll Flutter Engine from 17173994a8c2 to b388e852be44 (1 revision) (flutter/flutter#129708) 2023-06-28 xilaizhang@google.com [flutter roll] Revert "Fix `AnimatedList` & `AnimatedGrid` doesn't apply `MediaQuery` padding" (flutter/flutter#129645) 2023-06-28 engine-flutter-autoroll@skia.org Roll Flutter Engine from 2f4fc4872699 to 17173994a8c2 (1 revision) (flutter/flutter#129694) 2023-06-28 engine-flutter-autoroll@skia.org Roll Flutter Engine from a6d9d12c440f to 2f4fc4872699 (1 revision) (flutter/flutter#129691) 2023-06-28 engine-flutter-autoroll@skia.org Roll Flutter Engine from 25a5850f8b5b to a6d9d12c440f (4 revisions) (flutter/flutter#129687) 2023-06-28 engine-flutter-autoroll@skia.org Roll Flutter Engine from 7c7c45d53bec to 25a5850f8b5b (1 revision) (flutter/flutter#129682) 2023-06-27 engine-flutter-autoroll@skia.org Roll Flutter Engine from f320b8c36fee to 7c7c45d53bec (14 revisions) (flutter/flutter#129678) 2023-06-27 32242716+ricardoamador@users.noreply.github.com Update labeler yaml (flutter/flutter#129676) 2023-06-27 32242716+ricardoamador@users.noreply.github.com Revert "Fix the matcher condition where multiple matchers are found" (flutter/flutter#129675) 2023-06-27 32242716+ricardoamador@users.noreply.github.com Revert "Labeler format to remove extra single quote" (flutter/flutter#129674) 2023-06-27 32242716+ricardoamador@users.noreply.github.com Revert "Update labeler.yml to v5.0.0-beta.1" (flutter/flutter#129673) 2023-06-27 32242716+ricardoamador@users.noreply.github.com Labeler format to remove extra single quote (flutter/flutter#129672) 2023-06-27 32242716+ricardoamador@users.noreply.github.com Fix the matcher condition where multiple matchers are found (flutter/flutter#129670) 2023-06-27 737941+loic-sharma@users.noreply.github.com Automatically migrate ClipboardData.text to non-null (flutter/flutter#129567) 2023-06-27 72562119+tgucio@users.noreply.github.com Remove Editable.onCaretChanged callback (flutter/flutter#109114) 2023-06-27 bkonyi@google.com Reland "Fix issue where DevTools would not be immediately available when using --start-paused (#126698)" (flutter/flutter#129368) 2023-06-27 15619084+vashworth@users.noreply.github.com Update Xcode to 14.3.1 (flutter/flutter#129024) 2023-06-27 109253501+pdblasi-google@users.noreply.github.com Adds `dart_fix` support to `integration_test` (flutter/flutter#129579) 2023-06-27 chillers@google.com Update labeler.yml to v5.0.0-beta.1 (flutter/flutter#129617) 2023-06-27 luccas.clezar@gmail.com iOS TextSelectionToolbar fidelity (flutter/flutter#127757) 2023-06-27 jason-simmons@users.noreply.github.com Make a paragraph test involving Chinese characters work with inconsistent host system fonts (flutter/flutter#129628) 2023-06-27 engine-flutter-autoroll@skia.org Roll Packages from 6b70804 to f89ce02 (7 revisions) (flutter/flutter#129630) 2023-06-27 engine-flutter-autoroll@skia.org Roll Flutter Engine from 715eff211a42 to f320b8c36fee (6 revisions) (flutter/flutter#129599) 2023-06-27 jhy03261997@gmail.com Fix chinese text is not selected by long press (flutter/flutter#129320) 2023-06-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 0da06de991a9 to 715eff211a42 (4 revisions) (flutter/flutter#129593) 2023-06-26 godofredoc@google.com Fix syntax error in no-response (flutter/flutter#129588) 2023-06-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from f2d70cc809cd to 0da06de991a9 (3 revisions) (flutter/flutter#129582) 2023-06-26 hans.muller@gmail.com Updated chip_test.dart tests for M3 (flutter/flutter#129570) 2023-06-26 engine-flutter-autoroll@skia.org Roll Flutter Engine from 4032a9bc964e to f2d70cc809cd (4 revisions) (flutter/flutter#129574) 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 is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose ...
This change removes an unused parameter that was recently removed in the `RenderEditable` on the `master` branch flutter/flutter#109114. Fixes #1923 ## Pre-launch Checklist - [x] I read the [Flutter Style Guide] _recently_, and have followed its advice. - [x] I signed the [CLA]. - [x] I read the [Contributors Guide]. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] All existing and new tests are passing. --------- Co-authored-by: Brett Morgan <brett.morgan@gmail.com>
This PR removes the convoluted logic of
Editable.onCaretChanged
callback fed back toEditableText
, used just so the field can be scrolled into view. Instead, the caret rect (or selection extent) is read from Editable. This also fixes a problem where after changing selection from collapsed to non-collapsed viauserUpdateTextEditingValue()
,EditableText
would use outdated caret location when scrolling to show the caret asEditable
only called theonCaretChanged
when selection was collapsed.Also addressed:
Editable
so caret painting is skipped for invalid selectionEditableText
, both_cursorActive
and_cursorTimer
are checked which prevents from restarting blinking that has just been stopped.Relevant tests passing:
Pre-launch Checklist
///
).