Skip to content

Conversation

@LongCatIsLooong
Copy link
Contributor

Fixes #133241
and some CupertinoTextField cleanup.

Pre-launch Checklist

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

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

@github-actions github-actions bot added a: text input Entering text in a text field or keyboard related problems framework flutter/packages/flutter repository. See also f: labels. f: cupertino flutter/packages/flutter/cupertino repository labels Sep 7, 2023
@LongCatIsLooong LongCatIsLooong marked this pull request as ready for review September 7, 2023 18:03
attachment: widget.clearButtonMode,
hasText: text.text.isNotEmpty,
);
return switch (attachment) {
Copy link
Contributor

Choose a reason for hiding this comment

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

TIL you can use switch statements in this way. Awesome!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is new in dart3. It's a switch expression (an expression evaluates to a value so you can directly return a switch expression), a bit different from a switch statement.

}

void _onClearButtonTapped() {
// Special handle onChanged for ClearButton
Copy link
Contributor

Choose a reason for hiding this comment

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

consider consolidating this comment into one sentence. maybe something like Handler for ClearButton that calls onChanged when the clear button is tapped.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I basically moved the code and the comment to an instance method. I'll update the comment.

this.onTapOutside,
this.inputFormatters,
this.enabled,
this.enabled = true,
Copy link
Contributor

Choose a reason for hiding this comment

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

I wonder if we should just make this a private variable inside of CupertinoTextFieldState similar to how TextFieldState does it. I'm not too opinionated on this either way but it would keep the API consistent between both TextFields.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

TextField.enabled? is a bool? because it can default to InputDecoration.enabled I think. Here it doesn't have anything to default to other than the const true so I don't know if there's a good reason to keep this bool?.

I don't think we need to store enabled in CupertinoTextFieldState since the configuration is completely determined by the widget itself (CupertinoTextField.enabled), unless I'm missing something?

Copy link
Contributor

Choose a reason for hiding this comment

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

I didn't consider the defaults in InputDecoration, that makes sense to me then.

// Ideally this should be baseline aligned. However that comes at
// the cost of the ability to compute the intrinsic dimensions of
// this widget.
// See also https://github.com/flutter/flutter/issues/13715
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: consider adding a period at the end of this line.

final String? placeholderText = widget.placeholder;
final Widget? placeholder = placeholderText == null
? null
: Visibility(
Copy link
Contributor

Choose a reason for hiding this comment

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

Before this change the placeholder would not be built at all if there was text, but now it is built regardless but hidden when there is text. This is so the input field does not shrink when the user starts entering text because now the placeholder is still there just hidden.

Copy link
Contributor

Choose a reason for hiding this comment

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

Just wondering if I am understanding this change correctly.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah the placeholder will be kept in the widget tree to make sure the text field's height is always greater than or equal to the height of the first line of the placeholder, even when there's user text.

Copy link
Contributor

@Renzo-Olivares Renzo-Olivares 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

@MitchellGoodwin MitchellGoodwin left a comment

Choose a reason for hiding this comment

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

LGTM

@LongCatIsLooong LongCatIsLooong added the autosubmit Merge PR when tree becomes green via auto submit App label Sep 8, 2023
@auto-submit auto-submit bot merged commit 804a7b2 into flutter:master Sep 8, 2023
@LongCatIsLooong LongCatIsLooong deleted the taller-cupertino-textfield branch September 8, 2023 16:54
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Sep 8, 2023
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Sep 8, 2023
flutter/flutter@aea4552...da676f7

2023-09-08 [email protected] Marks Linux_android very_long_picture_scrolling_perf__e2e_summary to be unflaky (flutter/flutter#134116)
2023-09-08 [email protected] Make `CupertinoTextField` at least as tall as its first line of placeholder (flutter/flutter#134198)
2023-09-08 [email protected] Roll Flutter Engine from f09a139101c3 to 6d6b44886175 (3 revisions) (flutter/flutter#134306)
2023-09-08 [email protected] Update links to iOS embedder docs to point to new Doxygen docs (flutter/flutter#134246)
2023-09-08 [email protected] Roll Packages from 22d4754 to aaae5ef (7 revisions) (flutter/flutter#134301)
2023-09-08 [email protected] Roll Flutter Engine from c38feb382e96 to f09a139101c3 (1 revision) (flutter/flutter#134299)
2023-09-08 [email protected] Roll Flutter Engine from f146d4bf244b to c38feb382e96 (1 revision) (flutter/flutter#134293)
2023-09-08 [email protected] Roll Flutter Engine from a140ab4a4ec6 to f146d4bf244b (1 revision) (flutter/flutter#134290)
2023-09-08 [email protected] Roll Flutter Engine from ea1d0d28e26f to a140ab4a4ec6 (5 revisions) (flutter/flutter#134288)
2023-09-08 [email protected] fix a Scrollbar example crash (flutter/flutter#127925)
2023-09-08 [email protected] Fix `Drawer` examples are missing `dartpad` tag (flutter/flutter#134219)
2023-09-08 [email protected] Roll Flutter Engine from 4ac4429a206b to ea1d0d28e26f (1 revision) (flutter/flutter#134270)
2023-09-08 [email protected] Roll Flutter Engine from df3965a55fd8 to 4ac4429a206b (1 revision) (flutter/flutter#134267)
2023-09-08 [email protected] Roll Flutter Engine from 505ef3c33102 to df3965a55fd8 (1 revision) (flutter/flutter#134263)
2023-09-08 [email protected] _TabBarViewState should dispose created instances of PageController. (flutter/flutter#134091)
2023-09-08 [email protected] Remove non needed controllers in SegmentedButton. (flutter/flutter#134064)
2023-09-08 [email protected] EditableTextState should dispose cursorVisibilityNotifier. (flutter/flutter#133858)
2023-09-08 [email protected] TestWidgetsFlutterBinding should dispose old RestorationManager on reset. (flutter/flutter#133999)
2023-09-08 [email protected] Roll Flutter Engine from 65f6fb841c7a to 505ef3c33102 (4 revisions) (flutter/flutter#134260)
2023-09-07 [email protected] CupertinoAlertDialog should not create ScrollController on every build, if null values are passed in constructor. (flutter/flutter#134075)
2023-09-07 [email protected] Roll Flutter Engine from a828c26e7e97 to 65f6fb841c7a (1 revision) (flutter/flutter#134254)
2023-09-07 [email protected] _SearchBarState should dispose FocusNode, if it created it. (flutter/flutter#134076)
2023-09-07 [email protected] Roll Flutter Engine from 2dba8ceca824 to a828c26e7e97 (8 revisions) (flutter/flutter#134249)
2023-09-07 [email protected] [integration_test] Allow capture of screenshots for `FlutterFragmentActivity`s (flutter/flutter#132406)
2023-09-07 [email protected] Roll Flutter Engine from 8d07c2947e60 to 2dba8ceca824 (2 revisions) (flutter/flutter#134243)
2023-09-07 [email protected] Fix `ExpansionTile` properties cannot be updated with `setState` (flutter/flutter#134218)
2023-09-07 [email protected] [Windows Arm64] Remove device_type property (flutter/flutter#134181)
2023-09-07 [email protected] Roll Flutter Engine from f0b718e28779 to 8d07c2947e60 (3 revisions) (flutter/flutter#134240)

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://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
// if needed.
Expanded(
child: Stack(
// Ideally this should be baseline aligned. However that comes at
Copy link
Contributor

Choose a reason for hiding this comment

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

Since this change, the placeholder is vertically centered on multi-line textfield instead of being on the first line, because alignment is set to center instead of default topLeft. Is this intended? Not sure how to read the comment above.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah it should be baseline aligned with the input text instead of center aligned. I'll try to fix that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

a: text input Entering text in a text field or keyboard related problems autosubmit Merge PR when tree becomes green via auto submit App f: cupertino flutter/packages/flutter/cupertino repository framework flutter/packages/flutter repository. See also f: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CupertinoSearchTextField height changes if placeholder contains Chinese Character.

4 participants