-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Add Option to disable full selection on focus on TextField, TextFormField, and EditableText #163491
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
This allows overriding the default behavior of highlighting all the text on focus when using web or desktop
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 jumping in and submitting a PR for this. Some questions here. I always hesitate to add a new parameter to TextField, so I want to make sure we get it right.
When the user dismisses the modal, we want the focus to go back the text field with the same selection that it had before.
What platform is this on? Is this the same behavior that you would expect if you tab into that field?
Some other possible paths here for completeness:
- Keep the boolean parameter as-is in this PR, but set it to a default value that considers the current platform.
- Somehow give the user more generic control over what happens when the user focuses the field (make the parameter a function instead of a bool?).
| /// web or desktop | ||
| /// | ||
| /// By default this will highlight the text field on web and desktop, and can | ||
| /// only be turned off on those two platforms |
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.
Missing a period at the end of the sentence here and above.
|
|
||
| /// {@template flutter.widgets.editableText.highlightAllOnFocus} | ||
| /// Whether or not this field should highlight all text when gaining focus on | ||
| /// web or desktop |
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 special case for web and desktop makes me hesitate here. I know that's how it works now, though. What happens in a native iOS or Android app if you connect a hardware keyboard and use the tab key to move between fields?
|
@justinmc Yeah! Thank you for taking the time to help me with this! The last thing I want to do is mess up flutter 😆 So I appreciate the questions!! |
justinmc
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.
@camfrandsen Sorry for the slow response (vacation). Have you had any luck with the function? I'm thinking of something that would completely replace _adjustedSelectionWhenFocused, but that might not be practical since _adjustedSelectionWhenFocused uses private members currently. But would that kind of approach work for your use case or is it not doable?
Otherwise, what if your existing boolean parameter defaulted to something like this?
static bool get defaultHighlightAllOnFocus {
if (kIsWeb) {
return true;
}
return switch (defaultTargetPlatform) {
TargetPlatform.android => false,
TargetPlatform.iOS => false,
TargetPlatform.fuchsia => false,
TargetPlatform.linux => true,
TargetPlatform.macOS => true,
TargetPlatform.windows => true,
};
}Then we could remove the line about highlightAllOnFocus only applying to web and desktop? I'm just trying to make sure that this parameter makes sense and doesn't have any strange behavior that's dependent on our current private approach.
| /// By default this will highlight the text field on web and desktop, and can | ||
| /// only be turned off on those two platforms | ||
| /// {@endtemplate} | ||
| final bool highlightAllOnFocus; |
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.
Actually this should probably be called selectAllOnFocus.
setCustomSelectionOnFocus allows developers to set the selection when the text field gets focus
|
@justinmc No worries! I realize that you have probably a ton of stuff going on 😆 |
justinmc
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.
Does this approach work for your use case? I worry about the private variables in the current _adjustedSelectionWhenFocused implementation:
flutter/packages/flutter/lib/src/widgets/editable_text.dart
Lines 4641 to 4646 in a0b1b32
| final bool shouldSelectAll = | |
| widget.selectionEnabled && | |
| (kIsWeb || isDesktop) && | |
| !_isMultiline && | |
| !_nextFocusChangeIsInternal && | |
| !_justResumed; |
Those won't be available to app developers that write their own setCustomSelectionOnFocus, so they won't be able to recreate the existing behavior exactly.
| bool get selectionEnabled => enableInteractiveSelection; | ||
|
|
||
| /// {@template flutter.widgets.editableText.setCustomSelectionOnFocus} | ||
| /// Set a custom text selection when focus is given |
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.
Missing a period here.
| style: Typography.material2018().black.titleMedium!, | ||
| cursorColor: Colors.blue, | ||
| backgroundCursorColor: Colors.grey, | ||
| setCustomSelectionOnFocus: () => controller.selection, |
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: Maybe set this to something different so that it's more obvious that it worked, and not that it just kept the existing selection.
|
@justinmc Great question, it does work for us, but that doesn't mean it would work for everyone. This is how I broke it down in my head:
I could pass those two variables into the function so that developers could use them. Would it be better to add them later once there is a use case for them, or add them now so that if they are added later, there isn't a migration change for them? |
…selection changed Add missing period to document
justinmc
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.
tl;dr I think we should go back to your boolean approach.
I'm sorry for all of the back and forth here, but I feel more confident in the boolean approach after exploring the function approach first. I think the function approach is probably still the best way to do this, but given how EditableText is currently written, it's not practical to do it that way without bigger refactoring and/or an API that might be a big maintenance burden.
If we were going to do the function approach, I think we would need _adjustedSelectionWhenFocused to be rewritten as a static default value for setCustomSelectionOnFocus. That way developers could fall back to the default behavior, something like this:
TextField(
setCustomSelectionOnFocus: (...) {
if (mySpecialCase) {
return TextSelection(...);
}
return EditableText.defaultSetCustomSelectionOnFocus(...);
},
),But the API will get pretty tricky if we do that. I say go back to the boolean. Is it possible to do it with a default value like I mentioned in #163491 (review)?
| Brightness? keyboardAppearance, | ||
| EdgeInsets scrollPadding = const EdgeInsets.all(20.0), | ||
| bool? enableInteractiveSelection, | ||
| SetCustomSelectionOnFocus? setCustomSelectionOnFocus, |
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.
Could you also pipe the parameter through for CupertinoTextField?
8db6817 to
e77c811
Compare
Defaults to true on web
e77c811 to
9fea2b0
Compare
|
@justinmc I changed it back to a boolean. Thank you again for your help on this! Sometimes we have to try something to realize some of the pros and cons, so I am not worried at all about switching it to a function and back 😆 |
justinmc
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.
I appreciate your flexibility! I'm convinced that the boolean+default is the way to do it now looking at this code. Just some smaller improvements here.
| /// Whether or not this field should highlight all text when gaining focus on | ||
| /// web or desktop. |
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.
"highlight" => "select". Just to make sure that we're consistent with our wording.
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 another comment in this review I suggested that this parameter should apply equally to all platforms. If so then you should also remove "on web or desktop" here.
| this.scrollPadding = const EdgeInsets.all(20.0), | ||
| this.dragStartBehavior = DragStartBehavior.start, | ||
| bool? enableInteractiveSelection, | ||
| this.selectAllOnFocus, |
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.
Can you also set the same defaultSelectAllOnFocus default value for all of the parameters that you added, even these passthrough ones? In my opinion that's the most unambiguous way to handle passthrough parameters with default values.
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.
@justinmc I totally agree that is the most unambiguous way. I can do that easily for text_form_field (and did in my last commit), but material and cupertino text_field are not so straight forward since their constructors are currently const. If I wanted to default selectAllOnFocus to EditableText.defaultSelectAllOnFocus I would need to remove const from the constructor. Is that still worth it?
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.
Ah good point. I say leave them with no default in the case of const constructors.
| final bool shouldSelectAll = | ||
| widget.selectAllOnFocus && | ||
| widget.selectionEnabled && | ||
| (kIsWeb || isDesktop) && |
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 we can get rid of this line. This logic is encoded in defaultSelectAllOnFocus. Furthermore, if we remove this line, then selectAllOnFocus applies equally to all platforms, which I think is more clear for developers that are trying to understand what this parameter does.
| /// By default this will highlight the text field on web and desktop, and can | ||
| /// only be turned off on those two platforms. |
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.
And again along with my comment that this parameter should apply equally to all platforms, you would have to remove "and can only be turned off on those two platforms."
| ); | ||
|
|
||
| // Regression test for https://github.com/flutter/flutter/issues/163399. | ||
| testWidgets('when selectAllOnFocus is turned off', (WidgetTester tester) async { |
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.
Can you also test when this is set to true? With my comment about how the parameter should apply equally to all platforms, the behavior of true is different than the default behavior.
Fix comments now that selectAllOnFocus is not platform specific
justinmc
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.
A few comments, otherwise good to go. I'll look for a secondary reviewer.
| this.scrollPadding = const EdgeInsets.all(20.0), | ||
| this.dragStartBehavior = DragStartBehavior.start, | ||
| bool? enableInteractiveSelection, | ||
| this.selectAllOnFocus, |
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.
Ah good point. I say leave them with no default in the case of const constructors.
| this.keyboardAppearance = Brightness.light, | ||
| this.dragStartBehavior = DragStartBehavior.start, | ||
| bool? enableInteractiveSelection, | ||
| bool? selectAllOnFocus, |
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 one could default to defaultSelectAllOnFocus 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.
Yeah :) I default it on line 927 since defaultSelectAllOnFocus isn't a const value
| bool get selectionEnabled => enableInteractiveSelection; | ||
|
|
||
| /// {@template flutter.widgets.editableText.selectAllOnFocus} | ||
| /// Whether or not this field should select all text when gaining focus |
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.
Period at the end here and the next sentence.
| Brightness? keyboardAppearance, | ||
| EdgeInsets scrollPadding = const EdgeInsets.all(20.0), | ||
| bool? enableInteractiveSelection, | ||
| bool? selectAllOnFocus, |
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.
And this one could have a default I think?
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, having said that, it is not obvious that it defaults to defaultSelectAllOnFocus on line 287... I could put that in the comment, but I don't see how I can make defaultSelectAllOnFocus const... What are your thoughts?
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 am merging this conversation and #163491 (comment)
I am taking away the default since it isn't obvious and making defaultSelectAllOnFocus private
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, I think this ends up being like a lot of the other parameters here — the default is complicated, and the reader is left to look it up in the documentation of the corresponding field.
On this particular class and constructor, since this isn't a this.foo field parameter, that lookup is a bit more complicated than usual; but the constructor itself says what to do:
/// […]
/// For documentation about the various parameters, see the [TextField] class
/// and [TextField.new], the constructor.
TextFormField({and the [TextField.selectAllOnFocus] doc will have the answer.
gnprice
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.
Thanks for the contribution! I agree this simple API, with a boolean, seems good. Small comments below.
| /// The default value for [selectAllOnFocus]. | ||
| static bool get defaultSelectAllOnFocus { |
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 can stay private, right? It doesn't seem like API that's needed from outside this class.
| keyboardAppearance: keyboardAppearance, | ||
| enableInteractiveSelection: | ||
| enableInteractiveSelection ?? (!obscureText || !readOnly), | ||
| selectAllOnFocus: selectAllOnFocus ?? EditableText.defaultSelectAllOnFocus, |
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 guess it currently gets used here. But I think this can just pass through the value it has, whether that's null or otherwise — seems like that's cleanest anyway, by minimizing the number of details about EditableText that TextFormField needs to know.
| /// {@template flutter.widgets.editableText.selectAllOnFocus} | ||
| /// Whether or not this field should select all text when gaining focus | ||
| /// | ||
| /// By default this will select all text on web and desktop |
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.
| /// By default this will select all text on web and desktop | |
| /// Defaults to true on web and desktop platforms, | |
| /// and false on mobile platforms. |
| bool get selectionEnabled => enableInteractiveSelection; | ||
|
|
||
| /// {@template flutter.widgets.editableText.selectAllOnFocus} | ||
| /// Whether or not this field should select all text when gaining focus |
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.
| /// Whether or not this field should select all text when gaining focus | |
| /// Whether this field should select all text when gaining focus. | |
| /// | |
| /// When false, focusing this text field will leave its | |
| /// existing text selection unchanged. |
Fix grammer and clarify comments
justinmc
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 👍
| ), | ||
| assert(!obscureText || maxLines == 1, 'Obscured fields cannot be multiline.'), | ||
| enableInteractiveSelection = enableInteractiveSelection ?? (!readOnly || !obscureText), | ||
| selectAllOnFocus = selectAllOnFocus ?? _defaultSelectAllOnFocus, |
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.
Can't this be done inline on line 885? this.selectAllOnFocus = _defaultSelectAllOnFocus.
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 can't... I get an error for non_constant_default_value, since _defaultSelectAllOnFocus isn't const, and I don't know of a good way of how to make _defaultSelectAllOnFocus const...
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, and in fact the value of _defaultSelectAllOnFocus is not constant.
It will be a constant in release and profile builds, but not in debug builds. (See the implementation of defaultTargetPlatform.) The non-constantness is important in tests — in fact in this PR's tests, it's what enables the variant: TargetPlatformVariant.all() part to work 🙂
gnprice
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.
Thanks! LGTM.
| Brightness? keyboardAppearance, | ||
| EdgeInsets scrollPadding = const EdgeInsets.all(20.0), | ||
| bool? enableInteractiveSelection, | ||
| bool? selectAllOnFocus, |
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, I think this ends up being like a lot of the other parameters here — the default is complicated, and the reader is left to look it up in the documentation of the corresponding field.
On this particular class and constructor, since this isn't a this.foo field parameter, that lookup is a bit more complicated than usual; but the constructor itself says what to do:
/// […]
/// For documentation about the various parameters, see the [TextField] class
/// and [TextField.new], the constructor.
TextFormField({and the [TextField.selectAllOnFocus] doc will have the answer.
justinmc
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 👍
… TextFormField, and EditableText (flutter/flutter#163491)
… TextFormField, and EditableText (flutter/flutter#163491)
… TextFormField, and EditableText (flutter/flutter#163491)
flutter/flutter@83082c1...992ad74 2025-05-10 [email protected] Roll Fuchsia Linux SDK from F2xwL6WosfD7ETcPm... to VIG5-P9wwXgQkCkeX... (flutter/flutter#168633) 2025-05-10 [email protected] delete stale references/includes to classes no longer used (flutter/flutter#168616) 2025-05-10 [email protected] Roll Skia from 645404ec2d60 to 0feee17aeaca (1 revision) (flutter/flutter#168624) 2025-05-10 [email protected] Roll Skia from 12dbc34d742e to 645404ec2d60 (1 revision) (flutter/flutter#168621) 2025-05-09 [email protected] Add Option to disable full selection on focus on TextField, TextFormField, and EditableText (flutter/flutter#163491) 2025-05-09 [email protected] Add `CupertinoSlider` haptic feedback (flutter/flutter#167362) 2025-05-09 [email protected] Roll Skia from 7f7555536e3c to 12dbc34d742e (1 revision) (flutter/flutter#168614) 2025-05-09 [email protected] Fix: Impeller playground's points should be draggable (flutter/flutter#168351) 2025-05-09 [email protected] Remove old link for java gradle incompatibility (flutter/flutter#168561) 2025-05-09 [email protected] Roll Skia from 0d16b74f74a5 to 7f7555536e3c (5 revisions) (flutter/flutter#168609) 2025-05-09 [email protected] add missing lockfiles not checked in from running generate_gradle_lockfiles.dart (flutter/flutter#168600) 2025-05-09 [email protected] [Impeller] libImpeller: Usability improvements for WASM and python bindings. (flutter/flutter#168397) 2025-05-09 [email protected] Fix ListTile overwriting parent IconButtonTheme for its children (#167727) (flutter/flutter#168480) 2025-05-09 [email protected] Roll Skia from efccaeb08b8d to 0d16b74f74a5 (6 revisions) (flutter/flutter#168569) 2025-05-09 [email protected] [web] more cleanup of unused APIs (flutter/flutter#168524) 2025-05-09 [email protected] Roll Fuchsia Linux SDK from mqhX1OP8ezmialgqA... to F2xwL6WosfD7ETcPm... (flutter/flutter#168587) 2025-05-09 [email protected] Roll Packages from ab44c26 to 7814fab (4 revisions) (flutter/flutter#168597) 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] 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
…r#9239) flutter/flutter@83082c1...992ad74 2025-05-10 [email protected] Roll Fuchsia Linux SDK from F2xwL6WosfD7ETcPm... to VIG5-P9wwXgQkCkeX... (flutter/flutter#168633) 2025-05-10 [email protected] delete stale references/includes to classes no longer used (flutter/flutter#168616) 2025-05-10 [email protected] Roll Skia from 645404ec2d60 to 0feee17aeaca (1 revision) (flutter/flutter#168624) 2025-05-10 [email protected] Roll Skia from 12dbc34d742e to 645404ec2d60 (1 revision) (flutter/flutter#168621) 2025-05-09 [email protected] Add Option to disable full selection on focus on TextField, TextFormField, and EditableText (flutter/flutter#163491) 2025-05-09 [email protected] Add `CupertinoSlider` haptic feedback (flutter/flutter#167362) 2025-05-09 [email protected] Roll Skia from 7f7555536e3c to 12dbc34d742e (1 revision) (flutter/flutter#168614) 2025-05-09 [email protected] Fix: Impeller playground's points should be draggable (flutter/flutter#168351) 2025-05-09 [email protected] Remove old link for java gradle incompatibility (flutter/flutter#168561) 2025-05-09 [email protected] Roll Skia from 0d16b74f74a5 to 7f7555536e3c (5 revisions) (flutter/flutter#168609) 2025-05-09 [email protected] add missing lockfiles not checked in from running generate_gradle_lockfiles.dart (flutter/flutter#168600) 2025-05-09 [email protected] [Impeller] libImpeller: Usability improvements for WASM and python bindings. (flutter/flutter#168397) 2025-05-09 [email protected] Fix ListTile overwriting parent IconButtonTheme for its children (#167727) (flutter/flutter#168480) 2025-05-09 [email protected] Roll Skia from efccaeb08b8d to 0d16b74f74a5 (6 revisions) (flutter/flutter#168569) 2025-05-09 [email protected] [web] more cleanup of unused APIs (flutter/flutter#168524) 2025-05-09 [email protected] Roll Fuchsia Linux SDK from mqhX1OP8ezmialgqA... to F2xwL6WosfD7ETcPm... (flutter/flutter#168587) 2025-05-09 [email protected] Roll Packages from ab44c26 to 7814fab (4 revisions) (flutter/flutter#168597) 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] 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
…r#9239) flutter/flutter@83082c1...992ad74 2025-05-10 [email protected] Roll Fuchsia Linux SDK from F2xwL6WosfD7ETcPm... to VIG5-P9wwXgQkCkeX... (flutter/flutter#168633) 2025-05-10 [email protected] delete stale references/includes to classes no longer used (flutter/flutter#168616) 2025-05-10 [email protected] Roll Skia from 645404ec2d60 to 0feee17aeaca (1 revision) (flutter/flutter#168624) 2025-05-10 [email protected] Roll Skia from 12dbc34d742e to 645404ec2d60 (1 revision) (flutter/flutter#168621) 2025-05-09 [email protected] Add Option to disable full selection on focus on TextField, TextFormField, and EditableText (flutter/flutter#163491) 2025-05-09 [email protected] Add `CupertinoSlider` haptic feedback (flutter/flutter#167362) 2025-05-09 [email protected] Roll Skia from 7f7555536e3c to 12dbc34d742e (1 revision) (flutter/flutter#168614) 2025-05-09 [email protected] Fix: Impeller playground's points should be draggable (flutter/flutter#168351) 2025-05-09 [email protected] Remove old link for java gradle incompatibility (flutter/flutter#168561) 2025-05-09 [email protected] Roll Skia from 0d16b74f74a5 to 7f7555536e3c (5 revisions) (flutter/flutter#168609) 2025-05-09 [email protected] add missing lockfiles not checked in from running generate_gradle_lockfiles.dart (flutter/flutter#168600) 2025-05-09 [email protected] [Impeller] libImpeller: Usability improvements for WASM and python bindings. (flutter/flutter#168397) 2025-05-09 [email protected] Fix ListTile overwriting parent IconButtonTheme for its children (#167727) (flutter/flutter#168480) 2025-05-09 [email protected] Roll Skia from efccaeb08b8d to 0d16b74f74a5 (6 revisions) (flutter/flutter#168569) 2025-05-09 [email protected] [web] more cleanup of unused APIs (flutter/flutter#168524) 2025-05-09 [email protected] Roll Fuchsia Linux SDK from mqhX1OP8ezmialgqA... to F2xwL6WosfD7ETcPm... (flutter/flutter#168587) 2025-05-09 [email protected] Roll Packages from ab44c26 to 7814fab (4 revisions) (flutter/flutter#168597) 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] 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
… TextFormField, and EditableText (flutter/flutter#163491)
… TextFormField, and EditableText (flutter/flutter#163491)
… TextFormField, and EditableText (flutter/flutter#163491)
… TextFormField, and EditableText (flutter/flutter#163491)
… TextFormField, and EditableText (flutter/flutter#163491)
This allows overriding the default behavior of highlighting all the text
on focus when using web or desktop
This is adding a field to EditableText, TextField, and TextFormField to disable highlighting the entire field on web and desktop when it receives focus. The field is called highlightAllOnFocus. It does nothing on other platforms because the other platforms don't highlight the entire field on focus.
Note: I am not attached to this variable name, but it was the best I could think of... But I am very open to better suggestions 😆
Thank you for everything!
Issue: #163399
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.