-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Add undoStackModifier to UndoHistory
#138674
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
Add undoStackModifier to UndoHistory
#138674
Conversation
historyModifier to UndoHistoryundoStackModifier to UndoHistory
|
I think another way to solve the issue of discarding the composing region so the Android text input plugin does not trigger a restart is to have EditableText use a private implementation of UndoHistory. This would also involve probably making |
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.
Does this dedup like the ValueNotifier class does? If you map all inputs to the same value, does it push one entry to the stack, or multiple entries that are all identical?
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.
In that case it would just push one entry.
flutter/packages/flutter/lib/src/widgets/undo_history.dart
Lines 169 to 171 in db7ef5b
| if (widget.value.value == _lastValue) { | |
| return; | |
| } |
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.
Oh I was mistaken, this happens before the modifier gets a chance to do anything. I can make sure the modified value is taken into account for this logic.
There is also this logic in _UndoStack.push that prevents this.
flutter/packages/flutter/lib/src/widgets/undo_history.dart
Lines 390 to 392 in db7ef5b
| if (value == currentValue) { | |
| return; | |
| } |
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 is likely something that wants detailed documentation (for future readers and maybe future you)
bc71182 to
b729891
Compare
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 invoke this twice?
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.
Good catch, i'll use the variable already defined.
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.
The PR description seems to indicate clearing the composing region was to prevent the android input connection from restarting but the comment is a bit different? Is it the TextInputPlugin that's resetting the composing region or it's the undo mechanism?
(also IIRC android doesn't have a built-in undo/redo functionality, the native behavior refers to what Gboard does right?)
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 is the TextInputPlugin restarting the input here due to the composing region being changed when we do an undo/redo on the framework side.
The Google Keep app has in-app Undo/Redo controls and this is the behavior I observed.
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.
The Google Keep app has in-app Undo/Redo
I'm being pedantic, but that's not the "native" behavior right? It's just one app that chose to implement it that way.
It is the TextInputPlugin restarting the input here due to the composing region being changed when we do an undo/redo on the framework side.
but the comment is saying this is to prevent the text input plugin from resetting the composing region?
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.
Yeah that is true, I have updated the comments to better reflect this and match the pr description.
cc3adbb to
175605e
Compare
LongCatIsLooong
left a comment
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.
LGTM modulo comments.
flutter/flutter@918e336...d861ce4 2023-12-02 [email protected] Roll Flutter Engine from f0122c32c5cc to cfabe42bc0c6 (1 revision) (flutter/flutter#139423) 2023-12-02 [email protected] Roll Flutter Engine from f23c33f3831c to f0122c32c5cc (1 revision) (flutter/flutter#139422) 2023-12-02 [email protected] Roll Flutter Engine from d441f087052c to f23c33f3831c (2 revisions) (flutter/flutter#139421) 2023-12-02 [email protected] Roll Flutter Engine from 27d37db84b8e to d441f087052c (1 revision) (flutter/flutter#139419) 2023-12-02 [email protected] Roll Flutter Engine from 5a9f33e3a41e to 27d37db84b8e (1 revision) (flutter/flutter#139418) 2023-12-02 [email protected] Roll Flutter Engine from 9f8502c4e255 to 5a9f33e3a41e (1 revision) (flutter/flutter#139416) 2023-12-02 [email protected] Roll Flutter Engine from 43a1598713bb to 9f8502c4e255 (1 revision) (flutter/flutter#139414) 2023-12-02 [email protected] Roll Flutter Engine from 039439c1ffe8 to 43a1598713bb (1 revision) (flutter/flutter#139412) 2023-12-02 [email protected] Roll Flutter Engine from 4d19fedb7617 to 039439c1ffe8 (1 revision) (flutter/flutter#139410) 2023-12-02 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Retry on transient Skia failure." (flutter/flutter#139407) 2023-12-01 [email protected] Roll Flutter Engine from 162ad29a576f to 4d19fedb7617 (1 revision) (flutter/flutter#139397) 2023-12-01 [email protected] [l10n] Update Material shareButtonLabel (flutter/flutter#138899) 2023-12-01 [email protected] Retry on transient Skia failure. (flutter/flutter#139182) 2023-12-01 [email protected] Roll Flutter Engine from 820cb686d17d to 162ad29a576f (1 revision) (flutter/flutter#139394) 2023-12-01 [email protected] Roll Flutter Engine from 00316e4b7680 to 820cb686d17d (2 revisions) (flutter/flutter#139390) 2023-12-01 [email protected] Roll Flutter Engine from 95995c48d591 to 00316e4b7680 (1 revision) (flutter/flutter#139389) 2023-12-01 [email protected] Roll Flutter Engine from 69f0e5550702 to 95995c48d591 (6 revisions) (flutter/flutter#139388) 2023-12-01 [email protected] Added vscode-insiders path installed via snap (flutter/flutter#137117) 2023-12-01 [email protected] Typo fix in dartdoc in tool test (flutter/flutter#139386) 2023-12-01 [email protected] Roll Flutter Engine from 51ef7642750f to 69f0e5550702 (1 revision) (flutter/flutter#139348) 2023-12-01 [email protected] Roll Flutter Engine from 894360cca1ec to 51ef7642750f (1 revision) (flutter/flutter#139346) 2023-12-01 [email protected] Roll Flutter Engine from c26e6ced11df to 894360cca1ec (1 revision) (flutter/flutter#139345) 2023-12-01 [email protected] Roll Flutter Engine from 74d2df52514a to c26e6ced11df (26 revisions) (flutter/flutter#139342) 2023-12-01 [email protected] Roll Flutter Engine from 35939ca8534f to 74d2df52514a (1 revision) (flutter/flutter#139264) 2023-11-30 [email protected] Add `undoStackModifier` to `UndoHistory` (flutter/flutter#138674) 2023-11-30 [email protected] Migrate docs_test to shard. (flutter/flutter#139282) 2023-11-30 [email protected] Write Tests for API Examples of `cupertino_text_field.0`, `data_table.0`, `icon_button.2` & `ink_well.0` (flutter/flutter#139258) 2023-11-30 [email protected] Refactor prepare_package.dart (flutter/flutter#139277) 2023-11-30 [email protected] Roll Packages from e4aaba8 to bc72d15 (4 revisions) (flutter/flutter#139307) 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],[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
This change adds a feature to `UndoHistory` that allows the user to modify the value being pushed onto the undo stack. This is used by the framework to ignore the composing region when pushing history entries to the Undo stack on Android. This is so an undo does not trigger an input connection restart by the Android TextInputPlugin, which occurs when the framework changes the composing region. This is also the native platform behavior observed in Google Keep app on Android, where doing an undo during composing reverts to the previous state but with composing inactive and a subsequent redo does not bring back the composing region. Fixes flutter#130881 Partial fix for flutter#134398
This change adds a feature to
UndoHistorythat allows the user to modify the value being pushed onto the undo stack.This is used by the framework to ignore the composing region when pushing history entries to the Undo stack on Android. This is so an undo does not trigger an input connection restart by the Android TextInputPlugin, which occurs when the framework changes the composing region. This is also the native platform behavior observed in Google Keep app on Android, where doing an undo during composing reverts to the previous state but with composing inactive and a subsequent redo does not bring back the composing region.
Fixes #130881
Partial fix for #134398
Pre-launch Checklist
///).