8896 Commits

Author SHA1 Message Date
maRci002
0b9225afdf
Shared element transition for predictive back (#154718)
This PR adds a shared element transition for predictive back navigation,
based on the specification found here:
https://developer.android.com/design/ui/mobile/guides/patterns/predictive-back#shared-element-transition.

A new transition builder added:
`PredictiveBackPageSharedElementTransitionsBuilder`, which constructs
the shared element transition version.

<details><summary>Code sample</summary>

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

void main() {
  runApp(const MainApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        brightness: Brightness.light,
        pageTransitionsTheme: const PageTransitionsTheme(
          builders: {
            TargetPlatform.android: PredictiveBackPageSharedElementTransitionsBuilder(),
          },
        ),
      ),
      home: const FirstScreen(),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('First Screen'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.of(context).push(
              MaterialPageRoute(builder: (_) => const SecondScreen()),
            );
          },
          child: const Text('Go to Second Screen'),
        ),
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Theme(
      data: ThemeData(brightness: Brightness.dark),
      child: Scaffold(
        appBar: AppBar(
          title: const Text('Second Screen'),
        ),
        body: const Center(
          child: Text('Hello, Predictive back!'),
        ),
      ),
    );
  }
}
```

</details>


[predictive_back_shared_element.webm](https://github.com/user-attachments/assets/1194cf09-c64f-4b1f-aa3f-10feb0ef12bd)

Partial fix for #153577

---------

Co-authored-by: Justin McCandless <jmccandless@google.com>
2025-05-19 22:06:58 +00:00
Taha Tesser
559c314ba3
Update the RangeSlider widget to the 2024 Material Design appearance (#163736)
Fixes [Update `RangeSlider` for Material 3
redesign](https://github.com/flutter/flutter/issues/162505)

### Description

This PR updates `RangeSlider` with `year2023` flag which can be used to
opt into the 2024 `RangeSlider design appearance.

### Code Sample

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

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        sliderTheme: const SliderThemeData(
          showValueIndicator: ShowValueIndicator.always,
        ),
      ),
      home: Scaffold(
        appBar: AppBar(title: const Text('RangeSlider Sample')),
        body: const RangeSliderExample(),
      ),
    );
  }
}

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

  @override
  State<RangeSliderExample> createState() => _RangeSliderExampleState();
}

class _RangeSliderExampleState extends State<RangeSliderExample> {
  RangeValues _currentRange1Values = const RangeValues(20.0, 60.0);
  RangeValues _currentRange2Values = const RangeValues(30.0, 80.0);

  @override
  Widget build(BuildContext context) {
    return Column(
      spacing: 20.0,
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        RangeSlider(
          year2023: false,
          values: _currentRange1Values,
          max: 100,
          onChanged: (RangeValues values) {
            setState(() {
              _currentRange1Values = values;
            });
          },
        ),
        RangeSlider(
          year2023: false,
          values: _currentRange2Values,
          max: 100,
          divisions: 10,
          labels: RangeLabels(
            _currentRange2Values.start.round().toString(),
            _currentRange2Values.end.round().toString(),
          ),
          onChanged: (RangeValues values) {
            setState(() {
              _currentRange2Values = values;
            });
          },
        ),
      ],
    );
  }
}
```

</details>

| Preview 1 | Preview 2 |
| --------------- | --------------- |
| <img
src="https://github.com/user-attachments/assets/e14a1b04-4e32-4b37-b2f5-2d2001f53114"/>
| <img
src="https://github.com/user-attachments/assets/aad36529-d576-4ec7-b2e5-49c9387456be"/>
|


# Custom track gap and thumb size 

<img width="343" alt="Screenshot 2025-02-20 at 15 26 09"
src="https://github.com/user-attachments/assets/06c09679-1df8-4380-b3e6-c4add8f0cc42"
/>
<img width="338" alt="Screenshot 2025-02-20 at 15 27 19"
src="https://github.com/user-attachments/assets/6226c515-f96b-412a-b59e-cafd2fba0515"
/>

                

## 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].
- [ ] 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
2025-05-19 17:10:12 +00:00
chunhtai
56bfc03a09
Fixes Navigator calls onPopInvokedWithResult when onPopPage return false (#168567)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

as title

## 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].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] 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
2025-05-16 23:08:21 +00:00
Onnimanni Hannonen
4065d3c7ee
TextField magnifier stuck on long press cancel (#167881)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

## Fixes #167879

This PR fixes bug where magnifier and floating cursor get stuck on
screen when long press is cancelled (eg. by closing the app).

## 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
2025-05-16 22:39:54 +00:00
Bruno Leroux
358e2f003d
Fix Chip delete button semantic bounds (#168310)
## Description

This PR fixes Chip's delete icon semantic tap target.
Chip implementation extends the hit area of the delete icon but it did
not expand the semantic bounds.

### Before


![image](https://github.com/user-attachments/assets/5bcc87dc-6379-456d-a5d6-d3f30c7fda8a)

### After


![image](https://github.com/user-attachments/assets/af9b400c-91b6-4c26-a021-3c812a2b2a78)

## Related Issue

Fixes [Chip delete button tap target does not meet platform recommended
tap target size](https://github.com/flutter/flutter/issues/94098)

## Tests

Adds 1 test.

---------

Co-authored-by: Kate Lovett <katelovett@google.com>
Co-authored-by: chunhtai <47866232+chunhtai@users.noreply.github.com>
2025-05-16 22:39:54 +00:00
Mitchell Goodwin
57dd0de38c
Resolve Cupertino textstyle in MaterialBasedCupertinoThemeData (#167597)
Fixes #146864. The overridden resolve was keeping the Cupertino text
styles from resolving their dynamic colors depending on the theme
brightness when in a MaterialApp in most cases. I *believe* that this
was to keep values from the Material theme from changing, but as far as
I can tell that shouldn't affect anything in the current state and that
is 6 year old code. Waiting to see if tests make me a liar.

Update: tests made me a liar.

Before (text should be showing):
<img width="423" alt="Screenshot 2025-04-22 at 1 58 53 PM"
src="https://github.com/user-attachments/assets/0aabf6cf-2c25-4446-8d12-69e745f26be0"
/>

After:
<img width="418" alt="Screenshot 2025-04-22 at 1 59 16 PM"
src="https://github.com/user-attachments/assets/ea9958bb-4470-4f16-b5ca-f149be1301b1"
/>


## 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
2025-05-16 17:29:12 +00:00
Renzo Olivares
6de5aed91f
Fix selection handles showing when using a mouse (#168751)
Fixes #168252

## 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.

---------

Co-authored-by: Renzo Olivares <roliv@google.com>
2025-05-15 22:13:16 +00:00
Victor Sanni
736087e9a4
CupertinoSliverNavigationBar respects accessibility text scaling (#168866)
Dupe of https://github.com/flutter/flutter/pull/167313 (closed because
of issues with Google testing)

Fixes [Cupertino nav bars should respect accessibility text
scaling](https://github.com/flutter/flutter/issues/167248)
Fixes [Title jumps during a CupertinoNavigationBar ->
CupertinoNavigationBar hero
transition](https://github.com/flutter/flutter/issues/90589)

## Before

| Regular | Scaled | 
| --- | --- |
| <img width="378" alt="Image"
src="https://github.com/user-attachments/assets/0e010c06-253f-41a5-9b23-18c6d1f75046"
/> | <img width="378" alt="Image"
src="https://github.com/user-attachments/assets/7033f879-3e68-4e5e-94d1-cc84383d6d5d"
/> |

## After

| Regular | Scaled | 
| --- | --- |
| <img width="375" alt="flutter nav bar unscaled"
src="https://github.com/user-attachments/assets/ff761339-358e-4fa5-a0c2-b0f43f6cea2e"
/> | <img width="376" alt="flutter after 2 textscale"
src="https://github.com/user-attachments/assets/11d46451-bd46-4c65-9f3a-fb2b0da0d77c"
/> |

## Native

| Regular | Scaled | 
| --- | --- |
| <img width="376" alt="Image"
src="https://github.com/user-attachments/assets/5775f9f1-d1f9-446b-9ec8-e77073a8887e"
/> | <img width="376" alt="Image"
src="https://github.com/user-attachments/assets/76bf6263-d94c-4136-bd53-d91bb0d88437"
/> |
2025-05-15 02:28:18 +00:00
Victor Sanni
cd3b0a5a86
Reland "Clip search artifacts in CupertinoSliverNavigationBar searchable-to-searchable transitions" (#168772)
Fixes https://github.com/flutter/flutter/issues/168494
2025-05-14 19:04:06 +00:00
Mitchell Goodwin
0cf1d34e9b
Make Cupertino sheet set the systemUIStyle through an AnnotatedRegion (#168182)
#164680 caused a regression where the systemUIStyle would not be set
correctly if the previous page has a navbar.


https://github.com/user-attachments/assets/656d171c-d768-4481-bf64-4c93463752a2

This happens because the RenderView is constantly watching for
AnnotatedRegions at the top of the bottom of the screen to set the UI
style. So the sheet when initialized would set the style, but during the
transition the previous pages navbar is still at the top of the screen,
so the RenderView immediately sets the style back to where it was.

This PR fixes that by adding an AnnotatedRegion behind the previous page
through the delegatedTransition with the style set correctly for the
sheet. That way when the previous page drops low enough, the systemUI
switches over.


https://github.com/user-attachments/assets/e600e23b-aad3-4059-9009-c3037a15a2bd

The RenderView is watching for right around the midpoint of the systemUI
so it switches back and forth at a good point when the transition is
manually dragged back and forth.



https://github.com/user-attachments/assets/a299c0fd-0bbe-40f2-b235-a593f8b5a885



## 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.
- [ ] 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
2025-05-14 19:02:11 +00:00
auto-submit[bot]
606bb06c0f
Reverts "Use live region in error text input decorator for Android (#165531)" (#168848)
<!-- start_original_pr_link -->
Reverts: flutter/flutter#165531
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: matanlurey
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Breaks google client tests
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: ash2moon
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {chunhtai, reidbaker, hannah-hyj}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
Resolves partly https://github.com/flutter/flutter/issues/165510


**Context:** This issue originates from
https://github.com/flutter/flutter/issues/99715, where it was reported
that `liveRegion` alone was insufficient for announcing form validation
errors. While `liveRegion` announces the first error encountered,
subsequent submissions with the same error message on Android would not
trigger a re-announcement.

**Original Solution:** Pull request
https://github.com/flutter/flutter/pull/123373 addressed this by
implementing the `announce` event to ensure error messages were
consistently announced, even for repeated submissions.

**Native Android Behavior (Jetpack Compose):** In native Android
development using Jetpack Compose, setting the `isError` property of a
`TextField` to `true` triggers Talkback to announce "Error invalid
input." This announcement occurs *only* on the initial change to the
error state. Subsequent errors, even if the `isError` property remains
`true`, are not re-announced. This behavior closely mirrors the
functionality of `liveRegion`, with the key difference being that
`liveRegion` also announces the specific error text, in addition to the
general error state. Testing in a native Jetpack Compose application
confirms this behavior and provides a valuable comparison point against
the current Flutter form example.

**Suggested Action:** **Fork** the behavior in
https://github.com/flutter/flutter/pull/123373. Reinstate the use of
`liveRegion` for error announcements within `widgets/Form` for Android
and keep other platforms the same.

## 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

<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
2025-05-14 17:47:38 +00:00
Huy
494b08b420
Normalize BottomAppBarTheme (#168586)
This PR is to make `BottomAppBarTheme` conform to Flutter Material's
conventions for component themes:

- Added a `BottomAppBarThemeData` class which defines overrides for the
defaults for `BottomAppBar` properties.
- Added `BottomAppBarTheme` constructor parameters:
`BottomAppBarThemeData? data` and `Widget? child`. This is now the
preferred way to configure a `BottomAppBarTheme`:

```dart
BottomAppBarTheme(
	data: BottomAppBarThemeData(
	    color: xxx,
	    height: xxx,
	    elevation: xxx,
	    shape: xxx,
	    ...
	  ),
  	child: const BottomAppBar()
)
```
These two properties are made nullable to not break existing apps which
has customized `ThemeData.bottomAppBarTheme`.

- Update `BottomAppBarTheme` to be an `InheritedWidget` subclass.
- Changed the type of component theme defaults from `BottomAppBarTheme`
to `BottomAppBarThemeData`.
- Changed the `BottomAppBarTheme bottomAppBarTheme` property to
`BottomAppBarThemeData bottomAppBarTheme` in `ThemeData` and
`ThemeData.copyWith()`. This may cause breaking changes, a migration
guide will be created on website repo.
- Add new tests for `BottomAppBarThemeData` and update the existing
`BottomAppBarTheme` tests. And also turn to `true` for `useMaterial3`
(along with usages accordingly) at the common method `_withTheme()`
since `useMaterial3` is true by default.
- Addresses the "theme normalization" sub-project within #91772.

## 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

---------

Signed-off-by: huycozy <huy@nevercode.io>
2025-05-14 17:38:18 +00:00
Valentin Vignal
4d037cfdf5
Add titleAlignment to CheckboxListTile and RadioListTile (#168666)
Fixes https://github.com/flutter/flutter/issues/168596#issue-3052291792

## 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
2025-05-14 02:07:34 +00:00
LongCatIsLooong
30fe6e7857
Wire up the system text scaler from PlatformDispatcher (#159999)
The equality of 2 `SystemTextScaler` is determined by the platform's
`textScaleFactor` scalar, because the `scale` method is always
monotonically increasing wrt `textScaleFactor`.
On Android the scalar reflects the user configuration in system
preference it seems:
https://developer.android.com/reference/android/content/res/Configuration#fontScale

## 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].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] 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
2025-05-13 23:52:05 +00:00
Hannah Jin
30924e2d6d
[a11y] Semanctis flag refactor step 3: framework part (#167771)
issue: https://github.com/flutter/flutter/issues/166101, overall goal is
to update semantics flag to be a struct/class to support more than 32
flags.

step 1: https://github.com/flutter/flutter/pull/167421 Update
semantics_node.h and dart:ui
step 2: https://github.com/flutter/flutter/pull/167738 Update Embedder
part to use a struct instead of a int bit mask.
step 3:(this PR) Update Framework use the SemanticsFlags class instead
of bitmask

TODO:
web engine
use the new class

SemanticsUpdateBuilder.updateNode
pass a list of bools instead of bitmask

flutter_tester
use the SemanticsFlags class instead of bitmask


[apicheck_test.dart](https://github.com/flutter/flutter/pull/167421/files#diff-69aefaacf1041f639974044962123bfae0756ce86032ac1f26256099425d7a5a)
Add this test back
2025-05-13 23:48:10 +00:00
auto-submit[bot]
9bdbf497bc
Reverts "Clip search artifacts in CupertinoSliverNavigationBar searchable-to-searchable transitions (#168510)" (#168775)
<!-- start_original_pr_link -->
Reverts: flutter/flutter#168510
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: victorsanni
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Tree is red.
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: victorsanni
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {MitchellGoodwin}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
In https://github.com/flutter/flutter/pull/166705, non-searchable
transitions were clipped. This PR also clips searchable-to-searchable
transitions.

Also replaces type check to detect searchable-to-searchable transitions.

| Before | After | 
| --- | --- |
| <img width="377" alt="before bottom search artifactsd"
src="https://github.com/user-attachments/assets/a0726905-6dc1-463e-8cbb-bf1f5626fb1a"
/> | <img width="379" alt="nav bar search artifacts bottom"
src="https://github.com/user-attachments/assets/9474b3e5-a7a9-4a0e-9395-5f62106e65ad"
/> |
| <img width="379" alt="before top search artifacts"
src="https://github.com/user-attachments/assets/adf2b34d-ffa9-4c86-bee5-6683b06ec44f"
/> | <img width="379" alt="nav bar search artifacts top"
src="https://github.com/user-attachments/assets/a7a8edd8-0c66-4e3d-8958-3152bf55e42a"
/> |


Fixes [Transition between two CupertinoSliverNavigationBar.search routes
shows search artifacts mid-transition if one is collapsed and one is
extended](https://github.com/flutter/flutter/issues/168494)



<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
2025-05-13 23:04:47 +00:00
ash2moon
f3a1806562
Use live region in error text input decorator for Android (#165531)
Resolves partly https://github.com/flutter/flutter/issues/165510


**Context:** This issue originates from
https://github.com/flutter/flutter/issues/99715, where it was reported
that `liveRegion` alone was insufficient for announcing form validation
errors. While `liveRegion` announces the first error encountered,
subsequent submissions with the same error message on Android would not
trigger a re-announcement.

**Original Solution:** Pull request
https://github.com/flutter/flutter/pull/123373 addressed this by
implementing the `announce` event to ensure error messages were
consistently announced, even for repeated submissions.

**Native Android Behavior (Jetpack Compose):** In native Android
development using Jetpack Compose, setting the `isError` property of a
`TextField` to `true` triggers Talkback to announce "Error invalid
input." This announcement occurs *only* on the initial change to the
error state. Subsequent errors, even if the `isError` property remains
`true`, are not re-announced. This behavior closely mirrors the
functionality of `liveRegion`, with the key difference being that
`liveRegion` also announces the specific error text, in addition to the
general error state. Testing in a native Jetpack Compose application
confirms this behavior and provides a valuable comparison point against
the current Flutter form example.

**Suggested Action:** **Fork** the behavior in
https://github.com/flutter/flutter/pull/123373. Reinstate the use of
`liveRegion` for error announcements within `widgets/Form` for Android
and keep other platforms the same.

## 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

---------

Co-authored-by: Reid Baker <1063596+reidbaker@users.noreply.github.com>
2025-05-13 17:47:09 +00:00
Victor Sanni
40e990fd17
Clip search artifacts in CupertinoSliverNavigationBar searchable-to-searchable transitions (#168510)
In https://github.com/flutter/flutter/pull/166705, non-searchable
transitions were clipped. This PR also clips searchable-to-searchable
transitions.

Also replaces type check to detect searchable-to-searchable transitions.

| Before | After | 
| --- | --- |
| <img width="377" alt="before bottom search artifactsd"
src="https://github.com/user-attachments/assets/a0726905-6dc1-463e-8cbb-bf1f5626fb1a"
/> | <img width="379" alt="nav bar search artifacts bottom"
src="https://github.com/user-attachments/assets/9474b3e5-a7a9-4a0e-9395-5f62106e65ad"
/> |
| <img width="379" alt="before top search artifacts"
src="https://github.com/user-attachments/assets/adf2b34d-ffa9-4c86-bee5-6683b06ec44f"
/> | <img width="379" alt="nav bar search artifacts top"
src="https://github.com/user-attachments/assets/a7a8edd8-0c66-4e3d-8958-3152bf55e42a"
/> |


Fixes [Transition between two CupertinoSliverNavigationBar.search routes
shows search artifacts mid-transition if one is collapsed and one is
extended](https://github.com/flutter/flutter/issues/168494)
2025-05-13 16:56:59 +00:00
chunhtai
9771b4e464
Fixes hero not shown when remove pages without animation (#168617)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

fixes https://github.com/flutter/flutter/issues/158136

## 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].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] 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
2025-05-13 16:55:50 +00:00
Renzo Olivares
cba2e86350
[iOS] Do not hide selection handles when platform hides system context menu (#168678)
Fixes an issue where selection handles would be hidden when the system
hides the platform context menu on iOS.

Before:


https://github.com/user-attachments/assets/61afecd8-7558-41fb-bba3-74b6e8e47f13

After:


https://github.com/user-attachments/assets/0c6f83de-cb20-46ce-97d3-86d8873da3aa

Fixes #168636


## 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.

---------

Co-authored-by: Renzo Olivares <roliv@google.com>
2025-05-13 16:52:09 +00:00
Kostia Sokolovskyi
336a7ecf7b
Add assert for index parameter in IndexedStack. (#167757)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

Closes https://github.com/flutter/flutter/issues/165840 by adding an
assert with a more user-friendly message to the IndexedStack.

## 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.
- [ ] 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
2025-05-13 15:51:20 +00:00
Roman Jaquez
5c80840812
Make the barrier panel on the Material Drawer non-dismissible (#164810)
This PR entails making the modal barrier behind the Material Drawer
dismissible / non-dismissible via a Scaffold flag named
"drawerBarrierDismissible", as in:

```
Scaffold(
   drawerBarrierDismissible: false, // defaults to true so it behaves as normal
   ....
)
```

This is so as to force the Drawer to be opened / closed programmatically
using either:

```
Scaffold.of(context).openEndDrawer() / openDrawer()
```

or 

```
Scaffold.of(Utils.adminNav.currentContext!).closeDrawer() / closeEndDrawer()
```

and the user not closing the Drawer upon tapping on the modal barrier. 

## 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].

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Justin McCandless <justinjmccandless@gmail.com>
2025-05-12 23:37:28 +00:00
Bruno Leroux
81de9ed32c
Fix DropdownButtonFormField icon not vertically centered (#163205)
## Description

This PR fixes `DropdownButtonFormField` suffix icon vertical alignment
when `DropdownButtonFormField.inputDecoration` is provided without a
hint text.

### Before:

The dropdown icon is misaligned vertically:


![image](https://github.com/user-attachments/assets/b79b35ae-c333-4cb4-91f7-5c9ce8edd975)


### After:

The dropdown icon is aligned vertically:


![image](https://github.com/user-attachments/assets/b5704453-66a3-4cb2-97ff-bef556bff377)


## Related Issue

Fixes [DropdownButtonFormField arrow icon is misaligned
vertically](https://github.com/flutter/flutter/issues/157074)

## Tests

Adds 1 test.
2025-05-12 21:30:47 +00:00
Justin McCandless
4ccfa07f42
Android home/end keyboard shortcut support (#168184)
This PR adds support for Home and End keyboard shortcuts on Android. It
seems like we had mistakenly purposely disabled them on Android before
(or maybe native Android recently added support for them?).

In the process I also noticed that Linux was missing home/end+control
shortcuts, so I added them. I confirmed that these are supported
natively using my Linux machine.

Fixes https://github.com/flutter/flutter/issues/168183
2025-05-12 21:29:18 +00:00
Victor Sanni
b772c17f0d
Nav bar back label is not clipped mid-transition (#168194)
### Before


https://github.com/user-attachments/assets/fe354e67-c36d-4ce6-bf0f-0ca559962bfd

### After


https://github.com/user-attachments/assets/e57b91a0-00ed-493a-92b4-549dc8ab330a



Fixes [CupertinoNavigationBar flickers when previousPageTitle more than
4 characters](https://github.com/flutter/flutter/issues/149905)
2025-05-12 18:23:20 +00:00
Victor Sanni
00dc13b3a5
Remove CupertinoSliverNavigationBar background box when large title is extended (#168407)
### Before



https://github.com/user-attachments/assets/436e49a7-015b-4383-9670-11917945c659


### After



https://github.com/user-attachments/assets/6ea5aaa3-7d9f-42be-969b-a03119c8c0d8


### Native


https://github.com/user-attachments/assets/7b8c0f5d-9b72-48b6-8ec5-6c994c24a4ad



Fixes [CupertinoSliverNavigationBar with extended large title doesn't
have a transparent background with
transitionBetweenRoutes](https://github.com/flutter/flutter/issues/168406)
2025-05-12 17:51:02 +00:00
Huy
1ca93dec90
Fix Selected DropdownMenuItem isn't highlighted on mobile (#167874)
Fix https://github.com/flutter/flutter/issues/70294

### Description

The bug is about the previously selected DropdownMenuItem isn't
highlighted on mobile while it works on Web and desktop. The reason is
that `FocusManager.instance.highlightMode` has fallen to
`FocusHighlightMode.touch` on mobile by default (or touch device without
mouse in general):


6f220d3ec0/packages/flutter/lib/src/material/dropdown.dart (L172-L175)


7d56be4c8d/packages/flutter/lib/src/widgets/focus_manager.dart (L2335-L2353)


7d56be4c8d/packages/flutter/lib/src/widgets/focus_manager.dart (L1741-L1748)

We actually can work around this by setting
`FocusManager.instance.highlightStrategy` to
`FocusHighlightStrategy.alwaysTraditional`, see
https://github.com/flutter/flutter/pull/70442#issuecomment-727036571.
Nevertheless, this approach will may affect the entire scope of the app,
potentially resulting in unforeseen behavior for other widgets. 

In this PR, I propose a straightforward solution that utilizes an
ancestor widget (Ink) to manage the color state corresponding to
`InkWell.overlayColor`.

### Demo the fix


https://github.com/user-attachments/assets/b6476732-716c-4f39-ab82-7ab5accb7182


## 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

Signed-off-by: huycozy <huy@nevercode.io>
2025-05-12 08:48:22 +00:00
camfrandsen
687dcd9f57
Add Option to disable full selection on focus on TextField, TextFormField, and EditableText (#163491)
This allows overriding the default behavior of highlighting all the text
 on focus when using web or desktop

<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

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: https://github.com/flutter/flutter/issues/163399

## 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
2025-05-09 23:09:06 +00:00
Alex Medinsh
7592aeaa90
Add CupertinoSlider haptic feedback (#167362)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

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

## 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.
2025-05-09 23:05:05 +00:00
Ayyoub Kouadir
c82cf49b6c
Fix ListTile overwriting parent IconButtonTheme for its children (#167727) (#168480)
### Description

ListTile was recreating its own IconButtonThemeData—discarding any
styles inherited from an existing IconButtonTheme above it. This change
makes ListTile merge its theme data with the inherited one instead of
replacing it, so child IconButtons now correctly pick up parent styling

issue: https://github.com/flutter/flutter/issues/167727

---
## 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
2025-05-09 17:23:34 +00:00
Elliott Brooks
83082c19b7
[Widget Inspector] Clean-up changes in PR #167677 (#168488)
Follow-up to https://github.com/flutter/flutter/pull/167677

Addresses clean-up comments in cherry-pick:
https://github.com/flutter/flutter/pull/168386
2025-05-08 22:54:18 +00:00
Qun Cheng
194fb17d2a
Make MergeSemantics be able to merge customAction (#168414)
Fixes https://github.com/flutter/flutter/issues/166588

When merging semantics, an empty customSemanticsActions was always used
instead of using the `_customSemanticsActions` of the current semantics
node.

## 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.
2025-05-08 03:28:23 +00:00
Mohamed Amara
930d21504a
Add option to hide trailing icon in DropdownMenu (#167782)
This PR adds support for hiding the trailing icon in `DropdownMenu`
widget. Currently, there's no built-in option to remove it.

The change is non-breaking, as the trailing icon remains visible by
default unless `showTrailingIcon` is explicitly set to `false`. The
`showTrailingIcon` parameter follows a similar pattern to its use in the
`ExpansionTile` widget.

Fixes #164908

## 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.

---------

Co-authored-by: Qun Cheng <36861262+QuncCccccc@users.noreply.github.com>
2025-05-07 23:43:06 +00:00
Kishan Rathore
b0f5c8ce03
Feat: Animate fill for material app bar (#163913)
Feat: Animate fill for material app bar
fixes: #162988 

## 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.
2025-05-07 16:52:38 +00:00
Justin McCandless
cdc7ed506b
Ignore pointer on the outgoing route (#168425)
When going back with FadeForwardsPageTransition, this PR makes it
possible to interact with the incoming page before the transition has
finished.

| Before | After |
| --- | --- |
| <video
src="https://github.com/user-attachments/assets/fc2b18cf-b0a3-4be8-9360-361bcfe4a7e0"
/> |<video
src="https://github.com/user-attachments/assets/faaa42fb-9d7a-48df-9012-e99569244db3"
/> |


Fixes https://github.com/flutter/flutter/issues/168424
2025-05-06 23:36:52 +00:00
Kostia Sokolovskyi
c781b31320
Add height and width aspects to MediaQuery. (#167829)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

Closes https://github.com/flutter/flutter/issues/167828

### Description
- Adds `widthOf`, `maybeWidthOf`, `heightOf`, `maybeHeightOf` functions
to `MediaQuery`
- Adds tests for newly added functions

## 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
2025-05-06 19:35:13 +00:00
jcheng
c02d22d8ad
feat(SwitchListTile): ensure that 'isThreeLine' can be configured through the theme. (#166820)
This PR is a continuation of
[165481](https://github.com/flutter/flutter/pull/165481)

Related items also include:
[RadioListTile](https://github.com/flutter/flutter/pull/166964),
[CheckboxListTile](https://github.com/flutter/flutter/pull/166826)

## 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.
2025-05-06 05:25:32 +00:00
jcheng
dfd0a3cb5f
feat(RadioListTile):ensure that 'isThreeLine' can be configured through the (#166964)
This PR is a continuation of
[165481](https://github.com/flutter/flutter/pull/165481)

Related items also include:
[SwitchListTile](https://github.com/flutter/flutter/pull/166820),
[CheckboxListTile](https://github.com/flutter/flutter/pull/166826)

## 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.

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
2025-05-06 01:47:26 +00:00
Qun Cheng
826d065919
Revert "Wire up MenuAnchor, MenuBar, MenuItem-related widgets to aria roles (#165596)" (#168339)
This reverts commit 417f47fda55e5ef0505a84ca9ce558ac287a5d25.

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

## 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].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] 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
2025-05-05 23:57:33 +00:00
Elliott Brooks
78a2a3fa67
[Widget Inspector] Add on-device button for changing default "tap" behavior (#167677)
Fixes https://github.com/flutter/flutter/issues/166118

Adds a second button to the on-device inspector that allows a developer
to temporarily disable the default "tap triggers widget selection"
behavior without fully exiting out of widget selection mode. Fixes an
issue where enabling/disabling widget selection is destructive for some
app set-ups, causing the developer's app to lose state.

## Demo


![new_widget_selection_gif](https://github.com/user-attachments/assets/4f2e96fe-2478-4254-8fe5-4023598f1a5e)

## Material screenshots

### Dark mode

<img width="130" alt="Screenshot 2025-04-23 at 12 22 41 PM"
src="https://github.com/user-attachments/assets/e643fd26-6bcb-43a2-a718-191e1831345f"
/>

<img width="113" alt="Screenshot 2025-04-23 at 12 22 48 PM"
src="https://github.com/user-attachments/assets/5ac81455-64f0-4f07-9b36-b8fd498a9669"
/>

### Light mode

<img width="105" alt="Screenshot 2025-04-23 at 12 21 46 PM"
src="https://github.com/user-attachments/assets/49c67f6f-7d90-4758-83e9-ed8bf5505bae"
/>

<img width="108" alt="Screenshot 2025-04-23 at 12 21 55 PM"
src="https://github.com/user-attachments/assets/aeca0178-872d-441e-ae5f-e9b469d83d60"
/>

## Cupertino screenshots

<img width="399" alt="Screenshot 2025-04-22 at 2 21 46 PM"
src="https://github.com/user-attachments/assets/0ad45cee-15cf-45af-9fa0-c0955296aa29"
/>

### Dark mode

<img width="134" alt="Screenshot 2025-04-23 at 12 20 19 PM"
src="https://github.com/user-attachments/assets/9b34a6c2-5308-465e-b842-0fb180d25865"
/>

<img width="123" alt="Screenshot 2025-04-23 at 12 20 26 PM"
src="https://github.com/user-attachments/assets/7c601831-91c8-440e-98ae-070444574ff9"
/>


### Light mode

<img width="106" alt="Screenshot 2025-04-22 at 2 21 38 PM"
src="https://github.com/user-attachments/assets/517839d5-25d8-42e7-a9b9-f35a77725afc"
/>

<img width="103" alt="Screenshot 2025-04-22 at 2 21 55 PM"
src="https://github.com/user-attachments/assets/390f0b0f-1a9b-4880-b686-fabe102fe7b6"
/>
2025-05-05 19:58:23 +00:00
Sebastine Odeh
7326addb6a
Cupertino sheet MediaQuery values (#168041)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

There's an issue with the Cupertino sheet route in the current stable
version of Flutter. However, it was partly fixed in master. This PR
addresses passing the appropriate bottom padding values to the page
content, which ensures widgets placed in Safe Areas are laid out
correctly.

Before

![image](https://github.com/user-attachments/assets/614c9c56-2aeb-4471-a48b-05337cbe9089)

After

![image](https://github.com/user-attachments/assets/643d05b8-298f-4f33-9004-ca8b6de5f5a1)

Fixes [#167943](https://github.com/flutter/flutter/issues/167943)

## 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
2025-05-05 17:15:34 +00:00
Qun Cheng
14c45d944e
Revert "Fix hit-testing order in semantics (#167522)" (#168235)
This reverts commit d9cbff29bca75c8e1cf6a9fe24da44857de9445f.

Fixes https://github.com/flutter/flutter/issues/168164
2025-05-05 01:28:40 +00:00
yim
bdb36c50d2
Fix the incorrect position of SliverTree child nodes. (#167928)
Run the code below:
```dart
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

void main() => runApp(const MaterialApp(home: MyApp()));

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

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

class _MyAppState extends State<MyApp> {
  final GlobalKey _key = GlobalKey();
  final GlobalKey _childNodeKey = GlobalKey();

  late final List<TreeSliverNode<GlobalKey>> tree = [
    TreeSliverNode<GlobalKey>(_key, expanded: true, children: [
      TreeSliverNode<GlobalKey>(_childNodeKey),
    ]),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CustomScrollView(
        slivers: [
          TreeSliver(
            tree: tree,
            indentation: TreeSliverIndentationType.custom(40),
            treeRowExtentBuilder: (node, dimensions) => 40,
            treeNodeBuilder: (context, node, animationStyle) {
              return Container(
                key: node.content as Key,
                color: node.content == _key ? Colors.blue : Colors.green,
              );
            },
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          final RenderBox rb = _childNodeKey.currentContext!.findRenderObject() as RenderBox;
          print(rb.localToGlobal(Offset.zero));
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}
```
Get the screen:
![Screenshot 2025-04-28 at 22 51
50](https://github.com/user-attachments/assets/1b80a044-81ba-4338-b476-e6a726dd4c84)

When the `floatingActionButton` is clicked, it should print the position
of the green `Container`. The expected result is `Offset(40.0, 40.0)`,
but the actual result is `Offset(0.0, 40.0)`. `hitTest` also produces
incorrect results. This PR fixes the issue.



- [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.
- [ ] 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
2025-05-03 14:07:32 +00:00
Nick Sparks
bc0d3289cb
InputDecorator - animate between transparent hoverColor and hoverColor (#168244)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

As described in https://github.com/flutter/flutter/issues/155169,
TextFields with hoverColor set can have an issue where they flicker as
the mouse enters and exits their bounds.

_BorderContainerState uses a 15ms animation to transition between
non-hovered and hovered states. Part of this animation is a ColorTween
between Colors.transparent and a given hoverColor. Critically,
Colors.transparent is transparent black. On high refresh rate displays
(any display with faster than 60z), this can result in a frame being
rendered where the TextField fill color is a dark, semi-transparent
version of hoverColor.

The immediate solution to this is to animate between hoverColor and a
hoverColor with alpha 0.

Before:
https://github.com/user-attachments/assets/01d62c6a-015d-4dc7-9897-7c3a75ca8aa0
After:
https://github.com/user-attachments/assets/ff51a5b2-ba4a-4508-a111-4c915d31ac46

Fixes https://github.com/flutter/flutter/issues/155169
## 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

---------

Co-authored-by: Nick Sparks <6109599+nsparks@users.noreply.github.com>
2025-05-02 23:34:04 +00:00
Justin McCandless
9f42991d77
MediaQuery picks up view data changes (#166498)
This fixes a bug in MediaQuery's update logic and removes some
now-unnecessary workaround code.

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

Discovered in
https://github.com/flutter/flutter/pull/165354#discussion_r1999849170
2025-05-02 23:32:32 +00:00
Ramon Farizel
7448418bb5
Set Dialog's maximum width to 560dp according to Material's guidelines (#166643)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->
This commit introduces a `maxWidth` property to `Dialog` to allow
limiting the maximum width of the component. It is following the
[Material3
guidelines](https://m3.material.io/components/dialogs/specs#6771d107-624e-47cc-b6d8-2b7b620ba2f1)
for Dialogs

No tests have been created yet. I'd like to get feedback on the
implementation approach before writing tests to ensure they are aligned
with the intended design

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

## Pre-launch Checklist

- [x] 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.
- [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.
- [X] 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].
- [ ] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [ ] 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

---------

Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com>
Co-authored-by: Qun Cheng <36861262+QuncCccccc@users.noreply.github.com>
2025-05-02 20:52:14 +00:00
Bruno Leroux
183b9ea27e
Add DropdownMenuFormField (#163721)
## Description

This PR introduces DropdownMenuFormField.

## Related Issue

Fixes [Create
DropdownMenuFormField](https://github.com/flutter/flutter/issues/141941)
Fixes [Add validator to
DropdownMenu](https://github.com/flutter/flutter/issues/152131)

## Tests

Adds 41 tests.
2025-05-02 19:41:10 +00:00
Severin
f839918eb1
Add missing removeStatusListener for bottom sheets (#167899) (#167900)
Fixes the missing `removeStatusListener` in `_StandardBottomSheetState`.

* Fixes: #167899

I was unsure about the test regarding this change and I couldn't find
any similar tests, so I improvised with a custom controller class.
Feel free to request/make changes to the test as required.

## 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
2025-05-02 19:30:20 +00:00
Ben Konyi
e3db1bb721
[ Widget Preview ] Improve widget inspector support for widget previews (#168013)
In order to prevent the widget inspector from being able to select and
inspect elements of the widget previewer's scaffolding, this commit
consists of two notable changes:

1) A `debugWillManuallyInjectWidgetInspector` property has been added to
`WidgetsBinding`. Setting this property to true before running the
application will prevent `WidgetsApp` from injecting a `WidgetInspector`
instance into the widget tree, even if the widget inspector is enabled.
This means that the widget inspector will not be able to select and
highlight widgets by default, requiring `WidgetInspector` to be manually
wrapped around widget trees that should be inspectable.

2) The widget_preview_scaffold template has been updated to set
`debugWillManuallyInjectWidgetInspector` to true by default, and to wrap
individual previews provided by the developer with an instance of
`WidgetInspector` to restrict widget inspection to the contents of the
preview.

This change also includes a minor bug fix for situations where
`WidgetInspector` is inserted into an unconstrained context. Previously,
the `WidgetInspector`'s `_InspectorOverlay` would attempt to take up as
much space as possible, causing an overflow. To fix this, the
`_InspectorOverlay` is wrapped with `Positioned.fill(...)` to force it
to take on the same size as its parent `Stack`.

Work towards https://github.com/flutter/flutter/issues/166423

**Demo:**


https://github.com/user-attachments/assets/6d9d384c-5470-4828-983d-a6d9051a2282
2025-05-02 19:28:17 +00:00
zhongliugo
afb08bba88
Highlighting hour and minute input fields (#167766)
<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

This PR addresses the issue in time_picker.dart where pressing the TAB
key to navigate between the hour and minute fields in input mode doesn't
properly select the text in the newly focused field.

**What Changed**

- Added focus traversal logic in the _HourMinuteTextFieldState class's
initState method that:

1. Properly handles TAB key presses to move focus to the next field
2. Automatically selects all text when a field gains focus

- Added tests in time_picker_test.dart to verify that:

1. The hour field's text is selected when it gains focus
2. Pressing TAB moves focus to the minute field
3. The minute field's text is selected when it receives focus via TAB
key

**Why This Matters**
This change improves accessibility and usability of the time picker in
input mode. When users navigate using the keyboard (pressing TAB), they
expect the text in the newly focused field to be fully selected,
allowing them to immediately type a new value without having to manually
delete the existing text. This is standard behavior in form fields and
now the TimePicker component follows this expected pattern.

**Before the change:**
web:
https://time-picker-0423-before-change.web.app/
mobile:

https://github.com/user-attachments/assets/532c8aa2-4f8d-4118-9eaa-2fc6c2825486


**After the change:**
web:
https://time-picker-04232025.web.app/
mobile:

https://github.com/user-attachments/assets/9271b3b0-9ece-479e-a01e-a62e31b1d6c7



**Issue to fix:** 
https://github.com/flutter/flutter/issues/165830 

## 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].
- [ ] 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
2025-05-02 01:57:19 +00:00