14175 Commits

Author SHA1 Message Date
Polina Cherkasova
bff135153d
Fix leak in input_decorator [prod-leak-fix] (#155885)
Introduced by https://github.com/flutter/flutter/pull/153235.
2024-09-30 23:45:49 +00:00
Renzo Olivares
72edaa3d66
Move platform specific text selection behavior out of styled TextField classes (#155774)
Fixes #129726
2024-09-30 22:44:20 +00:00
Renzo Olivares
350b4753e0
RenderParagraphs _SelectableFragment.boundingBoxes should consider max line height (#155892)
Fixes #133637

This change updates the `_SelectableFragment.boundingBoxes` logic to consider the max line height. Previously we were using boxes that were tightly bound around each glyph, so you would have to click within the bounds of the glyph for double tap to select word to work. This is different than `SelectableText` which considers the max line height, as well as the native web behavior that also considers the max line height.

## Web
https://github.com/user-attachments/assets/4ce8c0ca-ec6f-4969-88b1-baa356be8278

## Flutter SelectableText
https://github.com/user-attachments/assets/54c22ad3-75d7-475b-856b-e9b2dbe09d54

## Flutter Text widget under SelectionArea
https://github.com/user-attachments/assets/27db0e2b-1d19-43cc-8ab3-16050e3a5bc7

After this change, Flutter's Text widget under a SelectionArea now matches the SelectableText and native web behavior.

This change also:
* Invalidates the cached bounding boxes when the paragraph layout changes.
* Updates `textOffsetToPosition` to consider `preferredLineHeight`. In cases when the text wraps, it was sometimes inaccurate.
2024-09-30 20:16:10 +00:00
Denis Gordin
31d6b35b7f
Move FlutterLogo from material to widget (#155864)
The PR is moving FlutterLogo from `lib/src/material` to `lib/src/widgets` because it has no dependency on Material.

Issue: https://github.com/flutter/flutter/issues/154448

PS: There is [older PR](https://github.com/flutter/flutter/pull/154711) for this issue and I don't know the policy on conflicting PRs. Let me know if I need to drop mine.
2024-09-30 17:19:25 +00:00
Mairramer
29dd03c56b
Fixes column text width calculation in CupertinoDatePicker (#151128)
Fixes #138305, #110319
2024-09-28 20:21:48 +00:00
RamonFarizel
1290ab42d1
Add magnificationScale to CupertinoMagnifier for Zoom Effect (#155276)
Add  `magnificationScale `to `CupertinoMagnifier` for Zoom Effect

The CupertinoMagnifier widget is not displaying the expected zoom effect.
This issue arises because the widget internally wraps the RawMagnifier, which has its magnificationScale attribute set to the default value of 1. As a result, no magnification is applied, and the zoom effect is absent.

Fixes #155275
2024-09-27 23:13:19 +00:00
Jonathan Steele
96291fc0c4
Fix typo on theme_data (#155644)
Fix one typo on theme_data

## 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].
- [ ] 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].
- [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
2024-09-27 14:33:09 -07:00
Bruno Leroux
9ee3fb813f
Fix DropdownMenu rendered behind AppBar (#155539)
## Description

This PR changes the `MenuAnchor` implementation in order to always show the menu on the root overlay. Doing so menus can't be hidden by other widgets especially when using go_router.

See [[go_router] DropdownMenu behind NavigationBar](https://github.com/flutter/flutter/issues/155034) where the DropdownMenu menu was displayed behind the navigation bar.

I did not make this configurable for the moment to avoid introducing a new parameter until there is a clear use case for it.

## Related Issue

Fixes [[go_router] DropdownMenu behind NavigationBar](https://github.com/flutter/flutter/issues/155034).

## Tests

Adds 1 test.
2024-09-27 07:18:35 +00:00
David Iglesias
f9a76aea87
Throw StateError when implicitView is null on wrapWithDefaultView. (#155734)
This PR tweaks `wrapWithDefaultView` (used by `runApp`) to raise a StateError with a legible error message when the `platformDispatcher.implicitView` is missing (for example, when enabling multi-view embedding on the web), instead of crashing with an unexpected `nullCheck` a few lines below.

* Before:
  <img width="619" alt="Screenshot 2024-09-25 at 7 33 47 PM" src="https://github.com/user-attachments/assets/4897dd3c-bdd0-4217-9f23-7eee9fab4999">

* After:
  <img width="613" alt="Screenshot 2024-09-26 at 5 01 49 PM" src="https://github.com/user-attachments/assets/3febb91d-a8c3-41b6-bf34-c2c8743b637c">

## Issues

* Fixes https://github.com/flutter/flutter/issues/153198

## Tests

Added a test to ensure the assertion is thrown when the `implicitView` is missing. Had to hack a little because I couldn't find any clean way of overriding the `implicitView`. The problem is that the flutter_test bindings [use `runApp` internally](8925e1ffdf/packages/flutter_test/lib/src/binding.dart (L1020)) a couple of times, so I can only disable the implicitView inside the test body (and must re-enable it before returning). Not sure if it's the best way, but it seems to do the trick for this simple test case!
2024-09-27 00:55:31 +00:00
Gray Mackall
cad7418f0a
Roll packages manually (#155786)
*Replace this paragraph with a description of what this PR is changing or adding, and why. Consider including before/after screenshots.*

*List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.*

*If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].*
2024-09-27 00:49:08 +00:00
Renzo Olivares
799cf16aeb
fix: SelectableText should handle focus changes (#155771)
This change updates the behavior of `SelectableText`, to clear its selection when it loses focus and the application is currently running. This fixes the behavior where you may have multiple active highlights if you have `SelectableText` along with other "selectable" widgets such as `TextField`, or `Text` widgets under a `SelectionArea`.

If the application is in the background, for example when another window is focused, the selection should be retained so when a user returns to the application it is still there.

This change also updates the behavior of selection on macOS, single tap up, previously it was selecting the word edge closest to the tapped position, the correct behavior on native is to select the precise position. This was causing `onSelectionChanged` to be called twice, once for tap down (sets the precise tapped position, handled by logic in `TextSelectionGestureDetector`), and a second time for single tap up (moves the cursor to closest word edge, handled by logic in `_SelectableTextSelectionGestureDetectorBuilder`). This type of selection inconsistency is related to this issue https://github.com/flutter/flutter/issues/129726, I plan to look into this further in a separate PR.

Fixes #117573
Fixes #103725
2024-09-27 00:17:05 +00:00
Renzo Olivares
9a64920bb9
RenderParagraph should invalidate its _SelectableFragments cached rects on window size updates (#155719)
Fixes #155143
Fixes #120578
2024-09-26 22:51:59 +00:00
zhengzeqin
7f663fc1d8
Fix broken text field with set hint and min and max lines(#153183) (#153235)
Fix https://github.com/flutter/flutter/issues/153183
Fix https://github.com/flutter/flutter/issues/52008

Pre-launch Checklist
2024-09-26 22:08:05 +00:00
Sikandar Sadaqat
cc0ca11ee4
added ability to configure shadow in banner (#155296)
Added ability to configure shadow in banner

Issues:  https://github.com/flutter/flutter/issues/154505

Before: 
![before](https://github.com/user-attachments/assets/d8b8e826-bab4-462a-a7ac-191e1597c3c6)

After:
![after](https://github.com/user-attachments/assets/3c4b57e7-182a-4749-af72-b82fdaf25013)
2024-09-26 04:04:24 +00:00
Camille Simon
146ea07abd
[Android] Update SystemUiMode and setSystemChromeEnabledSystemUIMode docs to note targeting Android 15+ change (#153466)
Updates `SystemUiMode` and `setSystemChromeEnabledSystemUIMode` documentation to reflect that edge-to-edge mode is used by default if the Flutter app targets Android 15.

Part of https://github.com/flutter/flutter/issues/150367 and framework counterpart to https://github.com/flutter/engine/pull/54560.
2024-09-25 19:41:18 +00:00
auto-submit[bot]
1c9607fc9c
Reverts "Normalize TabBarTheme (#155476)" (#155698)
Reverts: flutter/flutter#155476
Initiated by: eyebrowsoffire
Reason for reverting: The newly added tests are failing in postsubmit. See https://ci.chromium.org/ui/p/flutter/builders/prod/Windows%20framework_tests_libraries/19062/overview
Original PR Author: QuncCccccc

Reviewed By: {TahaTesser}

This change reverts the following previous change:
This PR is to make preparations to make `TabBarTheme` conform to Flutter's conventions for component themes:

* Added a `TabBarThemeData` class which defines overrides for the defaults for `TabBar` properties.
* Added 2 `TabBarTheme` constructor parameters: `TabBarThemeData? data` and `Widget? child`. This is now the preferred way to configure a `TabBarTheme`:
```
TabBarTheme(
  data: TabBarThemeData(labelColor: xxx, indicatorColor: xxx, ...),
  child: TabBar(...)
)
```
  These two properties are made nullable to not break existing apps which has customized `ThemeData.tabBarTheme`.

* Changed the type of component theme defaults from `TabBarTheme` to `TabBarThemeData`.

TODO:

* Fix internal failures.
* Change the type of `ThemeData.tabBarTheme` from `TabBarTheme` to `TabBarThemeData`. This may cause breaking changes, a migration guide will be created.

Addresses the "theme normalization" sub project within https://github.com/flutter/flutter/issues/91772
2024-09-25 17:50:18 +00:00
Qun Cheng
f310625bc6
Normalize TabBarTheme (#155476)
This PR is to make preparations to make `TabBarTheme` conform to Flutter's conventions for component themes:

* Added a `TabBarThemeData` class which defines overrides for the defaults for `TabBar` properties.
* Added 2 `TabBarTheme` constructor parameters: `TabBarThemeData? data` and `Widget? child`. This is now the preferred way to configure a `TabBarTheme`:
```
TabBarTheme(
  data: TabBarThemeData(labelColor: xxx, indicatorColor: xxx, ...),
  child: TabBar(...)
)
```
  These two properties are made nullable to not break existing apps which has customized `ThemeData.tabBarTheme`.

* Changed the type of component theme defaults from `TabBarTheme` to `TabBarThemeData`.

TODO:

* Fix internal failures.
* Change the type of `ThemeData.tabBarTheme` from `TabBarTheme` to `TabBarThemeData`. This may cause breaking changes, a migration guide will be created.

Addresses the "theme normalization" sub project within https://github.com/flutter/flutter/issues/91772
2024-09-25 17:19:00 +00:00
Kostia Sokolovskyi
ce24dd6a76
Add WidgetStateBorderSide example and tests for it. (#155559)
Fixes https://github.com/flutter/flutter/issues/155557

### Description
- Adds example for `WidgetStateBorderSide`
- Adds tests for `examples/api/lib/widgets/widget_state/widget_state_border_side.0.dart`
2024-09-25 15:53:28 +00:00
PurplePolyhedron
7677aac8e8
fix SearchAnchor disposing SearchController while it is still used (#155219)
fixes https://github.com/flutter/flutter/issues/155180
New behaviour: SearchAnchor now closes the menu when itself is disposed while the menu is still open. This is the behaviour of `MenuAnchor`/`OverlayPortal`.
2024-09-25 04:13:37 +00:00
flutter-pub-roller-bot
db76401cd8
Roll pub packages (#155640)
This PR was generated by `flutter update-packages --force-upgrade`.
2024-09-25 00:03:57 +00:00
Hugh Hou
27ec9ab982
Preserve transform when using *Gradient:withOpacity (#154908)
i don't think it was intentional to lose it?

- [] All existing and new tests are passing.
2024-09-24 22:14:59 +00:00
nick9822
d95821c1d1
fixed keyboardDismissBehavior on scroll without a drag (#154675)
fixes #154515, #150048 and other similar issues where user non-draggable scrolls (mouse wheel, two-fingers) should behave same as draggable ones.

In this PR, scrollUpdateNotification.dragDetails check is removed and it has a supporting test which simulates a scroll which does not produce a drag.
2024-09-24 22:12:32 +00:00
Kostia Sokolovskyi
96ba3c555a
Add WidgetStateProperty example and tests for it. (#155315)
This PR contributes to https://github.com/flutter/flutter/issues/155313

### Description
- Adds example for `WidgetStateProperty`
- Adds tests for `examples/api/lib/widgets/widget_state/widget_state_property.0.dart`
2024-09-24 00:31:07 +00:00
Taha Tesser
d5e843eca3
Fix missing icon props in button styleFrom methods (#154821)
Fixes [Add missing icon props in button `styleFrom`  methods.](https://github.com/flutter/flutter/issues/154798)

### Description

Add missing icon propers in the following widgets:

- `ElevatedButton.styleFrom` (missing `iconSize`)
- `FilledButton.styleFrom` (missing `iconSize`)
- `OutlinedButton.styleFrom` (missing `iconSize`)
- `TextButton.styleFrom` (missing `iconSize`)
- `MenuItemButton.styleFrom` (missing `iconSize` and `disabledIconColor`)
- `SubmenuButton.styleFrom` (missing `iconSize` and `disabledIconColor`)
- `SegmentedButton.styleFrom` (missing `iconSize`, `iconColor`, and `disabledIconColor`)

### Code sample

<details>
<summary>expand to view the code sample</summary> 

```dart
import 'package:flutter/material.dart';

enum Calendar { day, week, month, year }

void main() => runApp(const MyApp());

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Calendar calendarView = Calendar.week;
  bool isEnabled = true;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: Column(
            spacing: 10.0,
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton.icon(
                style: ElevatedButton.styleFrom(
                  iconSize: 30,
                  iconColor: Colors.red,
                  disabledIconColor: Colors.red.withValues(alpha: 0.5),
                ),
                onPressed: isEnabled ? () {} : null,
                icon: const Icon(Icons.add),
                label: const Text('ElevatedButton'),
              ),
              FilledButton.icon(
                style: ElevatedButton.styleFrom(
                  iconSize: 30,
                  iconColor: Colors.red,
                  disabledIconColor: Colors.red.withValues(alpha: 0.5),
                ),
                onPressed: isEnabled ? () {} : null,
                icon: const Icon(Icons.add),
                label: const Text('FilledButton'),
              ),
              FilledButton.tonalIcon(
                style: ElevatedButton.styleFrom(
                  iconSize: 30,
                  iconColor: Colors.red,
                  disabledIconColor: Colors.red.withValues(alpha: 0.5),
                ),
                onPressed: isEnabled ? () {} : null,
                icon: const Icon(Icons.add),
                label: const Text('Add'),
              ),
              OutlinedButton.icon(
                style: ElevatedButton.styleFrom(
                  iconSize: 30,
                  iconColor: Colors.red,
                  disabledIconColor: Colors.red.withValues(alpha: 0.5),
                ),
                onPressed: isEnabled ? () {} : null,
                icon: const Icon(Icons.add),
                label: const Text('OutlinedButton'),
              ),
              TextButton.icon(
                style: ElevatedButton.styleFrom(
                  iconSize: 30,
                  iconColor: Colors.red,
                  disabledIconColor: Colors.red.withValues(alpha: 0.5),
                ),
                onPressed: isEnabled ? () {} : null,
                icon: const Icon(Icons.add),
                label: const Text('TextButton'),
              ),
              SizedBox(
                width: 200,
                child: MenuItemButton(
                  style: MenuItemButton.styleFrom(
                    iconSize: 30,
                    iconColor: Colors.red,
                    disabledIconColor: Colors.red.withValues(alpha: 0.5),
                  ),
                  trailingIcon: const Icon(Icons.arrow_forward_ios),
                  onPressed: isEnabled ? () {} : null,
                  child: const Text('MenuItemButton'),
                ),
              ),
              SizedBox(
                width: 200,
                child: SubmenuButton(
                  style: SubmenuButton.styleFrom(
                    iconSize: 30,
                    iconColor: Colors.red,
                    disabledIconColor: Colors.red.withValues(alpha: 0.5),
                  ),
                  trailingIcon: const Icon(Icons.arrow_forward_ios),
                  menuChildren: <Widget>[
                    if (isEnabled) const Text('Item'),
                  ],
                  child: const Text('SubmenuButton'),
                ),
              ),
              SegmentedButton<Calendar>(
                style: SegmentedButton.styleFrom(
                  iconColor: Colors.red,
                  iconSize: 30,
                  disabledIconColor: Colors.red.withValues(alpha: 0.5),
                ),
                segments: const <ButtonSegment<Calendar>>[
                  ButtonSegment<Calendar>(
                      value: Calendar.day,
                      label: Text('Day'),
                      icon: Icon(Icons.calendar_view_day)),
                  ButtonSegment<Calendar>(
                      value: Calendar.week,
                      label: Text('Week'),
                      icon: Icon(Icons.calendar_view_week)),
                  ButtonSegment<Calendar>(
                      value: Calendar.month,
                      label: Text('Month'),
                      icon: Icon(Icons.calendar_view_month)),
                  ButtonSegment<Calendar>(
                      value: Calendar.year,
                      label: Text('Year'),
                      icon: Icon(Icons.calendar_today)),
                ],
                selected: <Calendar>{calendarView},
                onSelectionChanged:
                    isEnabled ? (Set<Calendar> newSelection) {} : null,
              )
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton.extended(
          onPressed: () {
            setState(() {
              isEnabled = !isEnabled;
            });
          },
          label: Text(isEnabled ? 'Enabled' : 'Disabled'),
        ),
      ),
    );
  }
}
```

</details>

### Preview (Customized using icon props in `styleFrom`  methods)

<img width="838" alt="Screenshot 2024-09-09 at 16 27 19" src="https://github.com/user-attachments/assets/551d328b-307f-4f63-b0e8-1358a12877f9">
2024-09-18 00:19:40 +00:00
Tong Mu
c57f99e419
[CupertinoAlertDialog] Add tap-slide gesture (#154853)
This PR adds "sliding tap" to `CupertinoAlertDialog` and fixes https://github.com/flutter/flutter/issues/19786. 

Much of the needed infrastructure has been implemented in https://github.com/flutter/flutter/pull/150219, but this time with a new challenge to support disabled buttons, i.e. the button should not show tap highlight when pressed (https://github.com/flutter/flutter/issues/107371).
* Why? Because whether a button is disabled is assigned to `CupertinoDialogAction`, while the background is rendered by a private class that wraps the action widget and built by the dialog body. We need a way to pass the boolean "enabled" from the child to the parent when the action is pressed. After much experimentation, I think the best way is to propagate this boolean using the custom gesture callback.
* An alternative way is to make the wrapper widget use an inherited widget, which allows the child `CupertinoDialogAction` to place a `ValueGetter<bool> getEnabled` to the parent as soon as it's mounted. However, this is pretty ugly...

This PR also fixes https://github.com/flutter/flutter/issues/107371, i.e. disabled `CupertinoDialogAction` no longer triggers the pressing highlight. However, while legacy buttons (custom button classes that are implemented by `GestureDetector.onTap`) still functions (their `onPressed` continues to work), disabled legacy buttons will still show pressing highlight, and there's no plan (actually, no way) to fix it. 

All tests related to sliding taps in `CupertinoActionSheet` has been copied to `CupertinoAlertDialog`, with additional tests for disabled buttons.
2024-09-17 20:16:18 +00:00
gaaclarke
af21d9f5b3
Added .keys to ColorSwatch (#155262)
This addresses the issue that ColorSwatch has operator[], but no way to know what are valid inputs.

issue: https://github.com/flutter/flutter/issues/155113
2024-09-16 21:20:32 +00:00
Kishan Rathore
bbc17fae3a
Fix: Flicker when reorderable list doesn't change its position (#151026)
Fix: Flicker when no update in index of dragged item

Resolves #150843

This PR ensures that even if we move dragged item anywhere in list and comeback to initial position, we smoothly adjust to that position.
2024-09-13 16:58:00 +00:00
Bruno Leroux
2277e05550
Fix TextField content should be selected on desktop when gaining focus (#154916)
## Description

This PR fixes the default selection on desktop when a text field is gaining focus.

Before this PR, when a text field is focused, the selection was collapsed at the end for all platforms except on Web where the entire content was selected.

After this PR, when a text field is focused, the entire content is selected on desktop and Web, and the selection is collapsed at the end on mobile platforms.

The implementation extends the work done in https://github.com/flutter/flutter/pull/119583 which implemented this feature for web.

## Related Issue

Fixes https://github.com/flutter/flutter/issues/150339.

## Tests

Updates 1 test.
Fixes 2 tests.
2024-09-13 08:09:13 +00:00
LongCatIsLooong
f513a69838
Mark _LayoutBuilderElement as always clean (#154694)
Fixes https://github.com/flutter/flutter/issues/154060

The error message doesn't make sense to me since one can call `setState` during the idle phase, and I'm not sure what this is guarding against without the right error message.

In the case of #154060 the layout builder was never laid out:
```
├─child 1: _RenderLayoutBuilder#7c319 NEEDS-LAYOUT NEEDS-PAINT
│   creator: LayoutBuilder ← _BodyBuilder ← MediaQuery ←
│     LayoutId-[<_ScaffoldSlot.body>] ← CustomMultiChildLayout ←
│     _ActionsScope ← Actions ← AnimatedBuilder ← DefaultTextStyle ←
│     AnimatedDefaultTextStyle ← _InkFeatures-[GlobalKey#1f6eb ink
│     renderer] ← NotificationListener<LayoutChangedNotification> ← ⋯
│   parentData: offset=Offset(0.0, 0.0); id=_ScaffoldSlot.body
│   constraints: MISSING
│   size: MISSING
```
So https://github.com/flutter/flutter/pull/154681 doesn't really fix #154060 since the layout callback cannot be run without a set of valid constraints. 

Before the `BuildScope` change all `_inDirtyList` flags were unset after the `BuildOwner` finishes rebuilding the widget tree, so `LayoutBuilder._inDirtyLst` is always set to false after a frame even for layout builders that were never laid out.
With the `BuildScope` change, `LayoutBuilder` has its own `BuildScope` which is only flushed after LayoutBuilder gets its constraints.
2024-09-13 01:24:11 +00:00
LongCatIsLooong
dbb588b6e8
Prevent the keyboard from reshowing on iOS (#154584)
Fixes https://github.com/flutter/flutter/issues/154156

Some iOS keyboard implementations change the selection in the text field if dismissed with active composing regions. The framework should not call `requestKeyboard` in such cases since that would bring up the keyboard again. 
In general the `TextInput.show` call is not needed for selection only changes. For working around https://github.com/flutter/flutter/issues/68571 the show call is needed only if we restarted the input on Android (and we don't restart on selection-only changes any way).
2024-09-12 21:29:13 +00:00
Nate Wilson
360e42c7af
Factor out Container objects (#153619)
This pull request follows up on [a PR from 4 months ago](https://github.com/flutter/flutter/pull/147432) that aimed to reduce the number of `Container` objects in the framework.

I feel like now's a good time to wrap it up!
(especially since I've gained a grasp of how "rebase" vs. "merge commit" can [affect test results](https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#using-git) 🙂)

<br>

resolves #147431
2024-09-11 23:59:53 +00:00
Kishan Rathore
04e1b174ea
fix: Dropdown menu trying to access highlight element which doesn't exist when search and filters both are enabled (#151969)
DropdownMenu throws RangeError when both filter and search are enabled because when we search for elements, we have some highlighted element, but if there is no element to highlight it tries to access 0th element is the filtered entries, but entries are empty.

Fixes #151878
2024-09-11 18:00:50 +00:00
abdalmonem
3e4d59eae1
Add 'direction' allow to 'SegmentedButton' oriented vertically (#150903)
This PR add the ability to change buttons of 'SegmentedButton' directionality (In the vertical and horizontal axis) to be 'vertical' or 'horizontal' instead of just horizontally position by adding "direction" argument.

`direction: Axis.horizontal` :
![Simulator Screenshot - iPhone 15 - 2024-06-26 at 13 37 26](https://github.com/flutter/flutter/assets/9139030/4936b7f8-246b-41ae-ac1c-7c75bc2d4f2d)

`direction: Axis.vertical` :
![Simulator Screenshot - iPhone 15 - 2024-06-26 at 13 43 07](https://github.com/flutter/flutter/assets/9139030/5aecf229-34d8-4608-a0f7-aee5c130257f)

Notice: in this example i used:
`style: ButtonStyle( shape: MaterialStateProperty.all<RoundedRectangleBorder>( const RoundedRectangleBorder( borderRadius: BorderRadius.zero, ), ), ) `
To change the Radius of `SegmentedButton`, and the default shape will be like:
![Simulator Screenshot - iPhone 15 - 2024-06-26 at 13 51 46](https://github.com/flutter/flutter/assets/9139030/24833153-02c8-4f5c-8c50-5a0effa19e9e)
I keep it as it is right now, cause its not the main purpose of this BR.

*List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.*

*If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].*
Fixes: #150416
2024-09-11 17:59:36 +00:00
gaaclarke
b5ce70a760
Migrate Color.toString() test, improves equalsIgnoringHashCodes (#154934)
This migrates the last failing test for https://github.com/flutter/engine/pull/54981.  In order to effectively resolve that test I had to make `equalsIgnoringHashCodes` more usable by printing out the line that differs instead of just a huge blob of "expected" vs "actual.

## example
Here's the output after the change.

### test
```
  test('equalsIgnoringHashCodes - wrong line', () {
    expect(
      '1\n2\n3\n4\n5\n6\n7\n8\n9\n10',
      equalsIgnoringHashCodes('1\n2\n3\n4\n5\n6\na\n8\n9\n10'),
    );
  });
```
### output
```
Expected: normalized value matches
          '1\n'
            '2\n'
            '3\n'
            '4\n'
            '5\n'
            '6\n'
            'a\n'
            '8\n'
            '9\n'
            '10'
  Actual: '1\n'
            '2\n'
            '3\n'
            '4\n'
            '5\n'
            '6\n'
            '7\n'
            '8\n'
            '9\n'
            '10'
   Which: Lines 7 differed, expected: 
          'a'
          but got
          '7'
```
2024-09-11 17:34:58 +00:00
gaaclarke
746d8af006
Adds dart fixes for Color opacity functions (#154953)
fixes https://github.com/flutter/flutter/issues/154572
2024-09-10 23:12:56 +00:00
gaaclarke
203f11647f
Update color assertions (#154752)
issue: https://github.com/flutter/flutter/issues/127855
This is a forward fix to help
https://github.com/flutter/engine/pull/54981 land.

It makes the following changes:
1) Removes hardcoded `Color.toString()` assumptions in asserts
1) Switches some lerp tests to use numbers that are more friendly to
uint8_t and floating point numbers
1) implements custom matchers for color
1) removes word wrapping for some asserts since it makes them fragile to
changes in `Color.toString()` invocations

## 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
2024-09-10 15:32:40 -07:00
Mairramer
93d06ebd6c
fix unpack freezing app with animation duration zero (#153890)
Fixes #153889 an issue where nodes were being removed incorrectly when using `AnimationStyle.noAnimation `or the animation duration was zero seconds, which previously caused the application to freeze due to hidden state updates. By skipping the animation and updating active nodes immediately in these cases, we avoid these issues and ensure smooth and accurate management of node states.
2024-09-10 22:24:54 +00:00
Qun Cheng
b872a27c4e
CupertinoSlidingSegmentedControl update (#152976)
This PR is to improve `CupertinoSlidingSegmentedControl` fidelity and add a new property `setEnabled` so that segments can be disabled now.

Fidelity update includes:
* small change on default thumb radius (Based on iOS 17 Figma file)
* separator height (Based on the comparison with SegmentedControl example in Xcode)
* segment min padding (Based on iOS 17 Figma file)
* thumb scale alignment (Based on the comparison with SegmentedControl example in Xcode). If the thumb is on the first or last position in SegmentedControl, the alignment should be `Alignment.leftCenter` and `Alignment.rightCenter` respectively, assuming the text direction is left to right. For segments in middle, they should have center alignment as previously.
* TextStyle update (Based on both the Figma file and the Xcode example)
* Clipped thumb shadow if the shadow is outside of the segmented control (Based on the Xcode example)
* Fixed the overall size shaking issue during segment switching on macOS and iOS

<details><summary>Alignment update demo</summary>

https://github.com/user-attachments/assets/6de3986f-6810-4dc4-8688-f87120557d89

</details>

<details><summary>Comparison before and after</summary>

Before:
![Screenshot 2024-08-08 at 1 42 57 PM](https://github.com/user-attachments/assets/fe2e49a8-4bbd-4d54-9aba-1f47ab9bd9d9)

After:
![Screenshot 2024-08-08 at 1 43 50 PM](https://github.com/user-attachments/assets/d3292f74-8d04-40ed-ae72-bf2e9b1751a4)

</details>

<details><summary>Shaking issue</summary>

Before:

https://github.com/user-attachments/assets/910d1271-75ea-4cec-8666-24090f9d4fb0

After:

https://github.com/user-attachments/assets/bc5ae3e1-600d-49a6-95d9-b1f5d1bd9f6d

</details>

The `disabledChildren` feature can be used to disable segments. The default disabled color comes from the inspection in the Xcode example.

<details><summary>Disabled feature demos</summary>

Disabled segment cannot be highlighted:

https://github.com/user-attachments/assets/70339364-23d5-41c7-b071-c7abe92abd62

`groupValue` can still be highlighted programmatically if it is disabled.

![Screenshot 2024-09-04 at 5 45 25 PM](https://github.com/user-attachments/assets/99d37903-3605-475f-b87a-ae118a23e94d)

</details>
2024-09-10 19:41:23 +00:00
Justin McCandless
24d0b1db0a
SearchBar context menu (#154833)
SearchBar and SearchAnchor can now control their context menu. They both received new contextMenuBuilder parameters. See the docs for EditableText.contextMenuBuilder for how to use this, including how to use the native context menu on iOS and to control the browser's context menu on web.
2024-09-10 09:54:00 -07:00
Taha Tesser
ebc2c3e437
Clean up SnackBar inherit theme data test (#154921)
Fixes [Verbose `SnackBar` inherit theme data test](https://github.com/flutter/flutter/issues/154920)
2024-09-10 16:27:14 +00:00
davidhicks980
bffa21549c
Revert "Improve CupertinoPopupSurface appearance" (#154893)
Reverts flutter/flutter#151430 to fix
https://github.com/flutter/flutter/issues/154887 until I can investigate
further.

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2024-09-10 08:12:46 -07:00
Nate Wilson
bfa04edca6
un-break ThemeData equality (#154695)
This PR is _almost_ able to close issue #89127.

Sadly, no `InheritedModel` or custom `RenderObject`s today; instead the [WidgetState operators](https://main-api.flutter.dev/flutter/widgets/WidgetStateOperators.html) have been restructured to support equality checks.

`WidgetStateProperty.fromMap()` is now capable of accurate equality checks, and all of the `.styleFrom()` methods have been refactored to use that constructor.

(Equality checks are still broken for `WidgetStateProperty.resolveWith()`, and any other non-`const` objects that implement the interface.)

<br><br>

credit for this idea goes to @justinmc: https://github.com/flutter/flutter/issues/89127#issuecomment-2313187703
2024-09-09 21:49:09 +00:00
Michal Hazdra
18c325af17
Add scrim color parameter to _ZoomEnterTransitionPainter (#152815)
Implements #152064

There is currently no test here as I am not sure how to do it efficiently, I tried making the painter public and adding the visibleForTestinhg attribute, but then I need to add comments to everything... And even when I did that I did not know how to test the painter itself maybe via Golden tests? I have not done those in the Flutter repo yet. And if it can be done without them then that is definitely a better way. I'll wait for what the review says I should do.
2024-09-09 21:49:07 +00:00
Polina Cherkasova
8435e12ce5
Fix leaky tests. (#154847) 2024-09-09 20:35:03 +00:00
Lu Shueh Chou
4aecec70a9
Expose foreground property of TextStyle in Icon widget (#150315)
Expose foreground property to icon. See issues:

- #139411
2024-09-09 17:30:19 +00:00
hgraceb
0139761878
Fix TabBar crash with SliverAppBar (#154485)
Fixes #154484 

Similar to #104998. Cause with updated at different phases of the same frame.
2024-09-08 03:57:20 +00:00
Siva
d7a658d705
Roll Flutter Engine from c50eb8a65097 to 419fb8c0ab3e (#154734)
c50eb8a650...419fb8c0ab

2024-09-06 98614782+auto-submit[bot]@users.noreply.github.com Reverts
"[engine] always force platform channel responses to schedule a task.
(https://github.com/flutter/flutter/issues/54975)"
(https://github.com/flutter/engine/pull/55000)
2024-09-06
[skia-flutter-autoroll@skia.org](mailto:skia-flutter-autoroll@skia.org)
Roll Skia from b6bab0fde426 to 6ad117bd2efe (2 revisions)
(https://github.com/flutter/engine/pull/54999)
2024-09-06
[skia-flutter-autoroll@skia.org](mailto:skia-flutter-autoroll@skia.org)
Roll Fuchsia Test Scripts from D9INMR2u4wcyiZ750... to
5dqcFlKzRjJb6V95W... (https://github.com/flutter/engine/pull/54998)
2024-09-06
[skia-flutter-autoroll@skia.org](mailto:skia-flutter-autoroll@skia.org)
Roll Skia from a09312b70d37 to b6bab0fde426 (3 revisions)
(https://github.com/flutter/engine/pull/54997)
2024-09-06
[skia-flutter-autoroll@skia.org](mailto:skia-flutter-autoroll@skia.org)
Roll Skia from 368f209ccca5 to a09312b70d37 (1 revision)
(https://github.com/flutter/engine/pull/54995)
2024-09-06
[skia-flutter-autoroll@skia.org](mailto:skia-flutter-autoroll@skia.org)
Roll Skia from aec11ae18bb6 to 368f209ccca5 (3 revisions)
(https://github.com/flutter/engine/pull/54992)
2024-09-06
[skia-flutter-autoroll@skia.org](mailto:skia-flutter-autoroll@skia.org)
Roll Fuchsia Linux SDK from xNv47d1TZmK9XgTxu... to PBeI0gGvgFdXV6hCg...
(https://github.com/flutter/engine/pull/54990)
2024-09-06
[skia-flutter-autoroll@skia.org](mailto:skia-flutter-autoroll@skia.org)
Roll Skia from 809f868ded1c to aec11ae18bb6 (22 revisions)
(https://github.com/flutter/engine/pull/54988)
2024-09-06
[30870216+gaaclarke@users.noreply.github.com](mailto:30870216+gaaclarke@users.noreply.github.com)
Removes the int storage from Color
(https://github.com/flutter/engine/pull/54714)
2024-09-06 [chris@bracken.jp](mailto:chris@bracken.jp) iOS,macOS: Add
logging of duplicate codesign binaries
(https://github.com/flutter/engine/pull/54987)
2024-09-06
[skia-flutter-autoroll@skia.org](mailto:skia-flutter-autoroll@skia.org)
Roll Fuchsia Test Scripts from k4lKsecg0pdIp-U7c... to
D9INMR2u4wcyiZ750... (https://github.com/flutter/engine/pull/54984)
2024-09-05
[a-siva@users.noreply.github.com](mailto:a-siva@users.noreply.github.com)
Manual roll of Dart. (https://github.com/flutter/engine/pull/54983)
2024-09-05 [chris@bracken.jp](mailto:chris@bracken.jp) iOS,macOS: add
unsigned_binaries.txt (https://github.com/flutter/engine/pull/54977)
2024-09-05
[jason-simmons@users.noreply.github.com](mailto:jason-simmons@users.noreply.github.com)
Manual Skia roll to 809f868ded1c
(https://github.com/flutter/engine/pull/54972)
2024-09-05
[1961493+harryterkelsen@users.noreply.github.com](mailto:1961493+harryterkelsen@users.noreply.github.com)
[canvaskit] Fix incorrect calculation of ImageFilter paint bounds
(https://github.com/flutter/engine/pull/54980)
2024-09-05 [jonahwilliams@google.com](mailto:jonahwilliams@google.com)
[engine] always force platform channel responses to schedule a task.
(https://github.com/flutter/engine/pull/54975)
2024-09-05
[tugorez@users.noreply.github.com](mailto:tugorez@users.noreply.github.com)
Fix unexpected ViewFocus events when Text Editing utilities change focus
in the middle of a blur call.
(https://github.com/flutter/engine/pull/54965)

Also rolling transitive DEPS:
fuchsia/sdk/core/linux-amd64 from xNv47d1TZmK9 to PBeI0gGvgFdX

---------

Co-authored-by: Christopher Fujino <christopherfujino@gmail.com>
Co-authored-by: Zachary Anderson <zanderso@users.noreply.github.com>
2024-09-06 15:42:07 -07:00
Taha Tesser
755cf0bd3f
Fix Material 3 AppBar.leading action IconButtons (#154512)
Fixes [`AppBar` back button focus/hover circle should not fill up whole height](https://github.com/flutter/flutter/issues/141361)
Fixes [[Material 3] Date Range Picker close button has incorrect shape](https://github.com/flutter/flutter/issues/154393)

This updates the leading condition added in https://github.com/flutter/flutter/pull/110722

### Code sample

<details>
<summary>expand to view the code sample</summary> 

```dart
import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SingleChildScrollView(
          child: Column(
            children: [
              Column(
                spacing: 10.0,
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  AppBar(
                    leading: BackButton(
                      style: IconButton.styleFrom(backgroundColor: Colors.red),
                    ),
                    backgroundColor: Theme.of(context).colorScheme.secondaryContainer,
                    title: const Text('AppBar with BackButton'),
                  ),
                  AppBar(
                    leading: CloseButton(
                      style: IconButton.styleFrom(backgroundColor: Colors.red),
                    ),
                    backgroundColor: Theme.of(context).colorScheme.secondaryContainer,
                    title: const Text('AppBar with CloseButton'),
                  ),
                  AppBar(
                    leading: DrawerButton(
                      style: IconButton.styleFrom(backgroundColor: Colors.red),
                    ),
                    backgroundColor: Theme.of(context).colorScheme.secondaryContainer,
                    title: const Text('AppBar with DrawerButton'),
                  ),
                ],
              ),
              const Divider(),
              Column(
                spacing: 10.0,
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  AppBar(
                    leading: BackButton(
                      style: IconButton.styleFrom(backgroundColor: Colors.red),
                    ),
                    backgroundColor: Theme.of(context).colorScheme.secondaryContainer,
                    toolbarHeight: 100.0,
                    title: const Text('AppBar with custom height'),
                  ),
                  AppBar(
                    leading: CloseButton(
                      style: IconButton.styleFrom(backgroundColor: Colors.red),
                    ),
                    backgroundColor: Theme.of(context).colorScheme.secondaryContainer,
                    toolbarHeight: 100.0,
                    title: const Text('AppBar with custom height'),
                  ),
                  AppBar(
                    leading: DrawerButton(
                      style: IconButton.styleFrom(backgroundColor: Colors.red),
                    ),
                    backgroundColor: Theme.of(context).colorScheme.secondaryContainer,
                    toolbarHeight: 100.0,
                    title: const Text('AppBar with custom height'),
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}
```

</details>

### Before

<img width="912" alt="Screenshot 2024-09-04 at 12 38 05" src="https://github.com/user-attachments/assets/25a6893c-89c9-4b45-a5bb-8da0eee71cd2">

### After

<img width="912" alt="Screenshot 2024-09-04 at 12 38 28" src="https://github.com/user-attachments/assets/49727183-568c-412e-9fa1-1eefd0cd87a7">
2024-09-06 21:10:35 +00:00
Chris Bobbe
84757af9f8
Adjust ButtonStyle.{foreground,icon}Color dartdocs for new behavior (#154646)
Fixes #154644.

This aligns these dartdocs with the new behavior introduced in PR #143501 / 51ed348f3, where passing `iconColor: null` would cause the icon to be colored with a hard-coded default instead of with `foregroundColor`.
2024-09-06 19:22:33 +00:00
auto-submit[bot]
8c6513ddd1
Reverts "Support custom transition duration for DialogRoute, CupertinoDialogRoute and show dialog methods. (#154048)" (#154743)
Reverts: flutter/flutter#154048
Initiated by: nate-thegrate
Reason for reverting: using `AnimationStyle` instead would allow for complete animation duration and curve customization.

Original PR Author: nploi

Reviewed By: {piedcipher, nate-thegrate}

This change reverts the following previous change:
Currently we don't support custom transition duration for `DialogRoute`, `CupertinoDialogRoute` and show dialog methods , This PR will to support that.
2024-09-06 19:13:17 +00:00