12185 Commits

Author SHA1 Message Date
Taha Tesser
de2dbf4eae
Fix TabBar tab indicator stretch effect (#150868)
fixes [[Material3] TabBar indicator stretch effect behaving weirdly with long tabs](https://github.com/flutter/flutter/issues/149662)

This PR fixes the tab indicator stretch effect, it currently stretches from both sides.  After the fix, tab indicator stretches depending on next size of the indicator and direction of the scroll.

The fix is based on Android Components implementation of the elastic/stretch effect.

20f92dfb51/lib/java/com/google/android/material/tabs/ElasticTabIndicatorInterpolator.java (L46-L78)

### Code sample

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

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScrollConfiguration(
        behavior: ScrollConfiguration.of(context)
            .copyWith(dragDevices: <PointerDeviceKind>{
          PointerDeviceKind.touch,
          PointerDeviceKind.mouse,
        }),
        child: DefaultTabController(
          length: 8,
          child: Scaffold(
            appBar: AppBar(
              bottom: const TabBar(
                isScrollable: true,
                tabAlignment: TabAlignment.start,
                tabs: <Widget>[
                  Tab(text: 'Home'),
                  Tab(text: 'Search'),
                  Tab(text: 'Add'),
                  Tab(text: 'Favorite'),
                  Tab(text: 'The longest text...'),
                  Tab(text: 'Short'),
                  Tab(text: 'Longer text...'),
                  Tab(text: 'Profile'),
                ],
              ),
            ),
            body: const TabBarView(
              children: <Widget>[
                Center(child: Text('Page')),
                Center(child: Text('Page')),
                Center(child: Text('Page')),
                Center(child: Text('Page')),
                Center(child: Text('Page')),
                Center(child: Text('Page')),
                Center(child: Text('Page')),
                Center(child: Text('Page')),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
```

</details>

### Before

https://github.com/flutter/flutter/assets/48603081/618d0ba9-40a5-458f-9fdc-5330505a6711

### After

https://github.com/flutter/flutter/assets/48603081/b7fa851e-e7a6-4b66-b77d-f88c7f4381da
2024-07-12 09:37:29 +00:00
Martin Kustermann
0c21fbc582
Remove workaround for a bug in dart2wasm (#151603)
The bug in dart2wasm that required this workaround should be fixed now.

Issue https://github.com/dart-lang/sdk/issues/56129
2024-07-12 08:54:23 +02:00
Victor Sanni
dddea4d155
Roll Switch.adaptive changes into CupertinoSwitch (#149465)
Brings over the changes from `Switch.adaptive` into `CupertinoSwitch`.

This change adds the following `Switch` parameters to `CupertinoSwitch`:
`inactiveThumbColor,` `activeThumbImage`, `onActiveThumbImageError`, `inactiveThumbImage`, `onInactiveThumbImageError`, `trackOutlineColor`, `trackOutlineWidth`, `thumbIcon`, `mouseCursor`. 

The following `Switch` parameters are ignored:

* `activeTrackColor`: because `activeColor` has the same function.
* `inactiveTrackColor`: because `trackColor` has the same function.
* `materialTapTargetSize`: because it is only applicable in `Material`.
* `hoverColor`, `overlayColor`, `splashRadius`: because these parameters configure the radial reaction overlay in `Material`, so are not applicable here.

The following `CupertinoSwitch` parameters which are absent from `Switch.adaptive` are retained:

* `onLabelColor`, 
* `offLabelColor`, 
* `applyTheme`

`trackColor` and `thumbColor` are of type `WidgetStateProperty` in Material `Switch`, but are currently of type `Color` in `CupertinoSwitch`. For backwards compatibility, both parameters are kept as `Color`s, but can be resolved in different `WidgetState`s using `WidgetStateColor.resolve()`.

This PR does not apply any fidelity updates to `CupertinoSwitch`.

Part of https://github.com/flutter/flutter/issues/149275

Related PRs: https://github.com/flutter/flutter/pull/130425 https://github.com/flutter/flutter/pull/148804
2024-07-12 00:16:10 +00:00
Bui Anh Viet
bc3d2feb9c
Fix: Submenu anchor misaligned with child panel in web (Resolved #151081) (#151294)
Fix: Submenu anchor misaligned with child panel in web (Resolved #151081)

- The issue comes from different in calculating the position of the menu in web and mobile.
- The calculation is currently base on function `getPositionForChild()` inside `_MenuLayout` in `menu_anchor.dart`, which base on the `anchorRect`
- The calculation of `anchorRect` is from `upperLeft` and `bottomRight`
- `upperLeft` is result of `localToGlobal()` function, which take the `point` arguments to be the base line. Right now, `point` is refer to `Offset.zero`, but it should not be Offset.zero since we having `densityAdjustment`, which is different between web and mobile
- Change `point` from `Offset.zero` to `Offset(dx, -dy)` should fix the error. Use `dx` instead of `-dx` since `dx` already be recalculated refer to the above comment on `densityAdjustment`.
Before:
![Screenshot 2024-07-03 at 10 28 51](https://github.com/flutter/flutter/assets/57765714/cd634ce5-8699-49ee-806f-435cbbca81a4)
After:
![Screenshot 2024-07-03 at 10 28 21](https://github.com/flutter/flutter/assets/57765714/81119996-b3e5-4e45-b44b-11fff8521998)

Issue: https://github.com/flutter/flutter/issues/151081
2024-07-11 19:25:18 +00:00
RamonFarizel
ceced3984f
Replaced {@tool snippet} with {@tool dartpad} in CupertinoTabController (#151272)
This PR update replace the `{@tool snippet} ` with `{@tool dartpad}` in CupertinoTabController

fixes: #151194
2024-07-11 19:23:20 +00:00
Jefferey Neuffer
90025e2964
expose keyboardType in DropdownMenu #150894 (#150896)
This PR exposes the `keyboardType` parameter in DropdownMenu, allowing the type of keyboard to be used for the text input to be changed.

fixes #150894
2024-07-11 18:30:57 +00:00
derdilla
defdb958ff
Add TimeOfDay comparison methods (#151233)
Implement Comparable for the TimeOfDay class as discussed in #139098. 

Also implements utility methods as `isBefore`, `isAfter` and `isAtSameTimeAs` for convenience and parity with `DateTime` from the dart sdk.
2024-07-11 16:51:35 +00:00
Victor Sanni
ceeeb7d090
Use correct locale for CupertinoDatePicker weekday (#151494)
#120052 introduces the `showDayOfWeek` flag to `CupertinoDatePicker` for mode `CupertinoDatePickerMode.date`, but the default `en` locale from `DefaultCupertinoLocalizations` is always used for the day of the week:

5103d75743/packages/flutter_localizations/lib/src/cupertino_localizations.dart (L116-L119)

This PR introduces a new `intl.DateFormat` `weekdayFormat` to replace the default with the abbreviated weekday for any supported locales.

| Before | After | 
| --- | --- |
|  <img width="379" alt="Screenshot 2024-07-09 at 5 08 43 PM" src="https://github.com/flutter/flutter/assets/77553258/d6899c6b-bd0a-4484-a6a8-3ef1512aeae1">  |  <img width="379" alt="Screenshot 2024-07-09 at 5 08 11 PM" src="https://github.com/flutter/flutter/assets/77553258/f320c634-80d1-4f3b-adfd-ed85a9dfc3f6"> |

Fixes #141875
2024-07-11 00:10:17 +00:00
Michael Goderbauer
a1bd8434b5
doc imports for enum values (#151548)
To verify that a9e6fefa91 works.

Part of https://github.com/flutter/flutter/issues/150800.
2024-07-10 21:39:20 +00:00
Tong Mu
b185d0fcf7
[CupertinoActionSheet] Fix padding and font size of buttons (#151199)
This PR updates the padding and font size of `CupertinoActionSheet`'s buttons to match native.

The rules are derived from measuring on simulators:
- The vertical padding is proportional to font size.
- The horizontal padding is fixed.
- The font size vary with text scaling in a way that doesn't exactly fit into any category within the HIG specification. This PR uses a segmented curve with interpolation to roughly match this non-linear curve. 

### Comparison 

(Left to right: Native, Flutter after PR, Flutter before PR. The number at the bottom is the system text scale level, from 1 being extra small to 12 being accessibility large 5.)

<img width="1019" alt="image" src="https://github.com/flutter/flutter/assets/1596656/65c2f222-1d6d-4485-b5f7-7d0a0c0ad56a">

<img width="1141" alt="image" src="https://github.com/flutter/flutter/assets/1596656/bc44e930-4cc8-4af4-944b-3056bb47de69">

<img width="1075" alt="image" src="https://github.com/flutter/flutter/assets/1596656/84659081-d518-494d-8b9c-a83fe23b8ffd">
2024-07-10 21:08:02 +00:00
Michael Goderbauer
43458fe8e5
Add docImports for flutter_test references (#151175)
Part of https://github.com/flutter/flutter/issues/150800

Follow-up to cl/648726004
2024-07-10 17:54:50 +00:00
Yegor
fe07fb4eba
fix heading level absorption, diagnostics; add tests and an a11y use-case (#151421)
Multiple fixes related to heading levels:

* Fix heading level absorption. Heading level would get erased when a semantics config is absorbed into another. With this change the highest heading level wins.
* Add `headingLevel` to the diagnostics of `SemanticsNode`.
* Add unit-tests for heading levels.
* Add an a11y use-case for headings.

Improves https://github.com/flutter/flutter/issues/46789 and general accessibility of headings.
2024-07-10 05:11:38 +00:00
Mouad Debbar
a99042e102
Update doc of SemanticsProperties.identifier (#149915)
Updating the docs to reflect the change in https://github.com/flutter/engine/pull/53278.

`Semantics(identifier: '...')` can now be used on web to facilitate testing and DOM lookup when it comes to semantics nodes.
2024-07-09 23:09:15 +00:00
Mouad Debbar
8d01fe0565
Add Semantics Property linkUrl (#150639)
The new property allows the user to specify a URI for their semantics link node. On the web, it sets the `href` of the anchor element associated with semantics node.

This is going to unlock better semantics support in the Link widget on web ([PR](https://github.com/flutter/packages/pull/6711)).

Engine counterpart: https://github.com/flutter/engine/pull/53507

Fixes https://github.com/flutter/flutter/issues/150263
2024-07-09 22:02:08 +00:00
Taha Tesser
850d76db74
Fix Material 3 Dialog default background color (#151400)
fixes [[Material 3] Wrong `Dialog` background color from ColorScheme](https://github.com/flutter/flutter/issues/148849
)

### Code sample

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

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

/// Flutter code sample for [showDialog].

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: const DialogExample(),
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.green,
          surfaceContainerHigh: Colors.amber,
        ),
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('showDialog Sample')),
      body: Center(
        child: OutlinedButton(
          onPressed: () => _dialogBuilder(context),
          child: const Text('Open Dialog'),
        ),
      ),
    );
  }

  Future<void> _dialogBuilder(BuildContext context) {
    return showDialog<void>(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('Basic dialog title'),
          content: const Text(
            'A dialog is a type of modal window that\n'
            'appears in front of app content to\n'
            'provide critical information, or prompt\n'
            'for a decision to be made.',
          ),
          actions: <Widget>[
            TextButton(
              style: TextButton.styleFrom(
                textStyle: Theme.of(context).textTheme.labelLarge,
              ),
              child: const Text('Disable'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
            TextButton(
              style: TextButton.styleFrom(
                textStyle: Theme.of(context).textTheme.labelLarge,
              ),
              child: const Text('Enable'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );
  }
}
```

</details>

### Before

<img width="674" alt="Screenshot 2024-07-08 at 14 26 39" src="https://github.com/flutter/flutter/assets/48603081/a95160f5-947e-4a6e-a3a5-82c94980c744">

### After

<img width="674" alt="Screenshot 2024-07-08 at 14 26 28" src="https://github.com/flutter/flutter/assets/48603081/fa912519-2a79-4fd5-a695-6e18542f0005">
2024-07-09 19:55:47 +00:00
PurplePolyhedron
f194cd3298
Make FittedBox not throw when child has zero size. (#150430)
fix https://github.com/flutter/flutter/issues/135082 , fix https://github.com/flutter/flutter/issues/139539 , fix https://github.com/flutter/flutter/issues/142910

Before, `FittedBox` would throw when child size is zero, unless the constraint is tight and fit is not `BoxFit.scaleDown`.
2024-07-08 22:51:04 +00:00
Nate Wilson
a3c7094d7d
Update DataTable documentation (#151356)
This PR resolves [some problems I was having with `DataTable`](https://github.com/flutter/flutter/issues/151005), based on advice from the style guide:

> ### Answer your own questions straight away
> If you find yourself asking a question about our systems, please place whatever answer you subsequently discover into the documentation in the same place where you first looked for the answer. That way, the documentation will consist of answers to real questions, where people would look to find them.

The `DataTable` documentation now specifies that the widget is based on the Material 2 spec, and it offers a list of useful alternatives.

<br>

Additionally, an item in the "See also" section was updated to use a reliable Go link:

```diff
- ///  * <https://material.io/design/components/data-tables.html>
+ ///  * <https://material.io/go/design-data-tables>
```
2024-07-08 22:08:19 +00:00
Nate Wilson
e1a6f763f9
MaterialStateWidgetState in documentation (#151376)
Documentation was migrated as follows:

1. did a RegEx search for `(///.*)MaterialState` and replaced with `$1WidgetState`
2. made sure that `MaterialStateOutlineInputBorder` & `MaterialStateUnderlineInputBorder` were unaffected
3. removed unused imports

<br>

The following files & directories were excluded:

- examples/
- packages/flutter/test/
- material_state.dart
- material_state_mixin.dart
- widget_state.dart

<br>

I believe this should be very straightforward, but I'd also be happy to break the PR in half to make it easier to review.

(related: #151373)
2024-07-08 21:12:04 +00:00
Hans Muller
f2be1260df
Added SliverFloatingHeader.snapMode (#151289)
When a user scroll gesture ends, Material Design floating headers snap into place by animating as far as needed and overlaying the underlying scrollable content. For example Gmail's search header works this way.  Other apps handle the snap animation by scrolling content out of the way. Instagram for example.

Added `SliverFloatingHeader.snapMode`, whose value can be `FloatingHeaderSnapMode.overlay` (the default) or `FloatingHeaderSnapMode.scroll`, so that developers can choose the snap animation style they want.

| FloatingHeaderSnapMode.overlay | FloatingHeaderSnapMode.scroll |
| --- | --- |
| <video src="https://github.com/flutter/flutter/assets/1377460/05c82ddf-05a6-4431-9b1e-88b901feea68" /> | <video src="https://github.com/flutter/flutter/assets/1377460/fedc34de-0b55-4f0d-976f-2df1965c90bc" /> |
2024-07-08 19:33:14 +00:00
Taha Tesser
f080102350
[Reland] - Enable explicitChildNodes for the AlertDialog content (#149597)
Fixes the semantics of AlertDialog.
2024-07-08 09:47:20 -07:00
Vincent Velociter
6e246ac854
Cupertino transparent navigation bars (#149102)
This PR is making the `CupertinoNavigationBar` and `CupertinoSliverNavigationBar` appear transparent as long as the content is not scrolled under them, so they look like standard iOS apps nav bars.

https://github.com/flutter/flutter/assets/423393/eee2700b-2a91-4577-922c-6163d47cb357

https://github.com/flutter/flutter/assets/423393/3847f2b5-0dac-4d5e-aa6f-03c1d2893e30

<details>
  <summary>Demo app code</summary>
  
  ```dart
import 'package:flutter/cupertino.dart';

/// Flutter code sample for [CupertinoTabScaffold].

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

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

  @override
  State<TabScaffoldApp> createState() => _TabScaffoldAppState();
}

class _TabScaffoldAppState extends State<TabScaffoldApp> {
  Brightness _brightness = Brightness.light;

  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      theme: CupertinoThemeData(brightness: _brightness),
      home: TabScaffoldExample(
          brightness: _brightness, onBrightnessToggle: _toggleBrightness),
    );
  }

  void _toggleBrightness() {
    setState(() {
      _brightness =
          _brightness == Brightness.light ? Brightness.dark : Brightness.light;
    });
  }
}

class TabScaffoldExample extends StatefulWidget {
  const TabScaffoldExample(
      {required this.brightness, required this.onBrightnessToggle, super.key});

  final VoidCallback onBrightnessToggle;
  final Brightness brightness;

  @override
  State<TabScaffoldExample> createState() => _TabScaffoldExampleState();
}

class _TabScaffoldExampleState extends State<TabScaffoldExample> {
  @override
  Widget build(BuildContext context) {
    return CupertinoTabScaffold(
      tabBar: CupertinoTabBar(
        items: const <BottomNavigationBarItem>[
          BottomNavigationBarItem(
            icon: Icon(CupertinoIcons.home),
            label: 'Home',
          ),
          BottomNavigationBarItem(
            icon: Icon(CupertinoIcons.search_circle_fill),
            label: 'Explore',
          ),
          BottomNavigationBarItem(
            icon: Icon(CupertinoIcons.person_fill),
            label: 'Profile',
          ),
          BottomNavigationBarItem(
            icon: Icon(CupertinoIcons.settings_solid),
            label: 'Settings',
          ),
        ],
      ),
      tabBuilder: (BuildContext context, int index) {
        return CupertinoTabView(
          builder: (BuildContext context) {
            return CupertinoPageScaffold(
              backgroundColor: index == 3
                  ? CupertinoColors.secondarySystemBackground
                      .resolveFrom(context)
                  : null,
              child: CustomScrollView(
                slivers: [
                  CupertinoSliverNavigationBar(
                    largeTitle: Text('Tab $index'),
                    initiallyTransparent: index != 2,
                    trailing: CupertinoButton(
                      padding: EdgeInsets.zero,
                      onPressed: widget.onBrightnessToggle,
                      child: Icon(
                        widget.brightness == Brightness.light
                            ? CupertinoIcons.moon_stars
                            : CupertinoIcons.sun_max,
                      ),
                    ),
                  ),
                  SliverSafeArea(
                    top: false,
                    sliver: SliverList.list(
                      children: [
                        CupertinoButton(
                          child: const Text('Next page'),
                          onPressed: () {
                            Navigator.of(context).push(
                              CupertinoPageRoute<void>(
                                builder: (BuildContext context) {
                                  return CupertinoPageScaffold(
                                    navigationBar: CupertinoNavigationBar(
                                      middle: Text('Inner page of tab $index'),
                                    ),
                                    child: ListView(
                                      children: [
                                        Center(
                                          child: CupertinoButton(
                                            child: const Text('Back'),
                                            onPressed: () {
                                              Navigator.of(context).pop();
                                            },
                                          ),
                                        ),
                                        if (index == 0) const _LongList(),
                                        const SizedBox(height: 20),
                                      ],
                                    ),
                                  );
                                },
                              ),
                            );
                          },
                        ),
                        if (index == 1) const _LongList(),
                        const SizedBox(height: 20),
                      ],
                    ),
                  ),
                ],
              ),
            );
          },
        );
      },
    );
  }
}

class _LongList extends StatelessWidget {
  const _LongList();

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        for (int i = 0; i < 50; i++) ...[
          CupertinoListTile(
            leading: const Icon(CupertinoIcons.book),
            title: Text('Bookstore item $i'),
          ),
        ],
      ],
    );
  }
}
  ```
</details>

This is the continuation of https://github.com/flutter/flutter/pull/142439.

I tried to keep the simplest API possible, so it's only introducing a new `automaticBackgroundVisibility` boolean parameter. 

In the implementation I had to use the `CupertinoPageScaffold` background color to make it look transparent instead of a 0 opacity, because of issues with route transitions.

I used an `InheritedWidget` so the nav bar is always getting the right background color from the parent scaffold, whether it is overridden or not. It would probably be better to make the inherited widget private but we'd need to move all the nav bar code to the same file as the scaffold, so for now I've just hidden it from the export. Let me know if it is okay to do that.

This PR is not dealing with the bottom tab bar, because the same [straightforward approach](dde8ec6dc7) doesn't work here. The problem is that the scroll notification is sent only when the scroll view is created or updated, so it doesn't work if one pushes a screen and navigates back.

Issues:
- #78607 
- #60411
2024-07-03 20:35:27 +00:00
Hans Muller
abd7cd0528
PinnedHeaderSliver example based on the iOS Settings AppBar (#151205)
A relatively elaborate PinnedSliverHeader example which creates an app bar that's similar to the one that appears in the iOS Settings app. In this example the pinned header starts out transparent and the first item in the list serves as the app's "Settings" title. When the title item has been scrolled completely behind the pinned header, the header animates its opacity from 0 to 1 and its (centered) "Settings" title appears. The fact that the header's opacity depends on the height of the title item - which is unknown until the list has been laid out - necessitates monitoring its SliverConstraints.scrollExtent from a scroll NotificationListener. 

https://github.com/flutter/flutter/assets/1377460/539e2591-d0d7-4508-8ce8-4b8f587d7648
2024-07-03 20:06:16 +00:00
Hans Muller
d1e150099e
SliverFloatingHeader (#151145)
A sliver that shows its [child] when the user scrolls forward and hides it when the user scrolls backwards. Similar headers can be found in  Google Photos and Facebook.

This sliver is preferable to the general purpose SliverPersistentHeader for its relatively narrow use case because there's no need to create a SliverPersistentHeaderDelegate or to predict the header's size.

https://github.com/flutter/flutter/assets/1377460/82b67dfb-5d38-4adf-9415-fc8527d0eb9f
2024-07-03 19:52:52 +00:00
Kishan Rathore
fbd6890fb7
Feat: Add withOpacity to gradient (#150670)
Feat: Add withOpacity to gradient because sometimes it's required to call withOpacity directly on gradient

Resolves #150501 

This adds a `withOpacity` feature to a gradient, given user has given colors this will override opacity to given opacity for them.
2024-07-03 18:06:04 +00:00
flyboy
7b69688c8a
content dimensions are not established get controller value error (#148938)
*Fixed #[146986](https://github.com/flutter/flutter/issues/146986)*
2024-07-03 17:17:28 +00:00
Jonathan Lau
5698944196
Fix scheduler event loop being stuck due to task with Priority.idle (#151168)
`handleEventLoopCallback()` should return `true` rather than `false` when there are tasks in the queue but the highest priority task is not run because of the `schedulingStrategy`. If `false` is returned when the queue still has tasks, the event loop stops, causing existing and new tasks to never be scheduled.

For full context, see https://github.com/flutter/flutter/issues/73766#issuecomment-2202427256.

Fixes #73766 and #82016.
2024-07-02 23:59:20 +00:00
Matej Knopp
348fdeebb3
Fix result propagation in RenderSliverEdgeInsetsPadding.hitTestChildren (#149825)
Fixes https://github.com/flutter/flutter/issues/149824
2024-07-02 23:21:22 +00:00
Igor Hnízdo
46030f1eff
Interactable ScrollView content when settling a scroll activity (#145848)
Currently when the user:
- flings a scrollable 
- overscrolls, and the scrollable is trying to settle
- applies `DrivenScrollActivity`
- swipes from one tab to the next

All inputs are discarded or forwarded directly to the Scrollable widget (scroll activity).

This leads to situations like these:

https://github.com/flutter/flutter/assets/12874766/51b7876f-5a91-4a86-aa21-c72f0b2c4263

https://github.com/flutter/flutter/assets/12874766/2f756a45-5e42-47d7-98a0-12f071d34e7c

https://github.com/flutter/flutter/assets/12874766/5eb998a1-b3b8-42a1-8b04-543f68823c2b

Which leads to poor experience on iOS. The native behavior of iOS is to allow touches while a scrollable is settling:

https://github.com/flutter/flutter/assets/12874766/e1ae61f8-d59c-40ae-a4c4-ad919f0dc6bf

This PR alters the `shouldIgnoreTouches` of `BallisticScrollAvtivity` and `DrivenScrollActivity` to not make the child of the scrollable ignore touches.

Fixes #145330

Currently tests that test tap to stop are not working as the taps now register when they should not. Because there is no distinction between flings inside and flings that go out of range.
2024-07-02 23:01:44 +00:00
Qun Cheng
5d3c4568d4
Fix typo (#151192)
Trivial PR to fix typo. The code snippet uses `alignment1`.

4cb6d38492/packages/flutter/lib/src/animation/animation.dart (L208-L211)
2024-07-02 22:15:06 +00:00
Hans Muller
acb41f3174
ScrollEndNotification example: auto-scroll based on RenderSliver constraints and geometry (#143538)
Adds a new ScrollNotificationEnd example that demonstrates how to trigger an auto-scroll based on an individual sliver's `SliverConstraints` and `SliverGeometry`. 

Then new example auto-scrolls one special "aligned item" sliver to the top or bottom of the viewport, whenever it's partially visible (because it overlaps the top or bottom of the viewport). This example differs from the existing ScrollEndNotification example because the layout of the to-be aligned sliver is retrieved from its `RenderSliver` via a
GlobalKey.  The new example does not rely on all of the list items having the same extent.
2024-07-02 18:46:19 +00:00
Michael Goderbauer
12e3635e8e
docimports for painting (#151143)
Part of https://github.com/flutter/flutter/issues/150800
2024-07-02 17:44:06 +00:00
Michael Goderbauer
9ff9c67272
docimports for scheduler (#151126)
Part of https://github.com/flutter/flutter/issues/150800
2024-07-02 17:31:58 +00:00
Nate Wilson
c9ec61ee90
dismissible.dart code cleanup (#150276)
While I was working on #149966, I noticed a couple of ways that `_DismissibleState` could be tweaked to be easier to follow.

Changes are described in comments below, and we're currently [awaiting a test exemption](https://discord.com/channels/608014603317936148/608018585025118217/1251255349277626490).
2024-07-02 17:31:53 +00:00
Michael Goderbauer
12954d1a38
docimports for physics (#151125)
Part of https://github.com/flutter/flutter/issues/150800

The `physics` library is completely clean after this! 🥳
2024-07-02 17:31:51 +00:00
Michael Goderbauer
06b9f7ba0b
docimports for services (#151134)
Part of https://github.com/flutter/flutter/issues/150800
2024-07-02 17:30:41 +00:00
Michael Goderbauer
3cf357ac7b
docimports for cupertino (#151149)
Part of https://github.com/flutter/flutter/issues/150800

Cupertino is fully clean after this!
2024-07-02 17:30:39 +00:00
Michael Goderbauer
82aaf3b44c
docimports for gestures (#151123)
Part of https://github.com/flutter/flutter/issues/150800
2024-07-02 17:29:43 +00:00
Michael Goderbauer
455be19d92
Docimports for foundation (#151119)
Part of https://github.com/flutter/flutter/issues/150800

Things I couldn't get to work:
2024-07-02 16:19:14 +00:00
Michael Goderbauer
0aedb5e688
docimports for semantics (#151132)
Part of https://github.com/flutter/flutter/issues/150800

Issues encountered:
2024-07-02 16:17:41 +00:00
Tong Mu
b6163726a1
Fix: CupertinoActionSheet should take up max height when actions section is short (#150708)
This PR addresses a bug from the previous rewrite of the `CupertinoActionSheet` height allocation algorithm. 

The previous approach assigns the content section with a minimal height. As a result, if the actions section is shorter than `_kActionSheetActionsSectionMinHeight`, the remaining space will not be taken by the content section.

As far as I know, this algorithm can not be implemented by simply compositing simple layout widgets, and therefore I created a new widget `_PriorityColumn` that uses a custom layout algorithm. (The resulting code is still shorter (and cleaner) than before the rewrite!)

Some other trivial refactor is also done to clean up the code around parameters of `_ActionSheetMainSheet`.
2024-07-02 04:47:37 +00:00
Nate Wilson
d07a165d22
Implementing a few switch statements (#150946)
I really like how patterns can be used for variable assignment and avoiding duplicated logic. (related: #150942)

```dart
// before
final GestureRecognizer? recognizer = info.recognizer;
if (recognizer is TapGestureRecognizer) {
  if (recognizer.onTap != null) {
    configuration.onTap = recognizer.onTap;
    configuration.isLink = true;
  }
} else if (recognizer is DoubleTapGestureRecognizer) {
  if (recognizer.onDoubleTap != null) {
    configuration.onTap = recognizer.onDoubleTap;
    configuration.isLink = true;
  }
}

// after
switch (info.recognizer) {
  case TapGestureRecognizer(:final VoidCallback? onTap):
  case DoubleTapGestureRecognizer(onDoubleTap: final VoidCallback? onTap):
    if (onTap != null) {
      configuration.onTap = onTap;
      configuration.isLink = true;
    }
}
```
2024-07-01 23:36:32 +00:00
Michael Goderbauer
61f891df51
More docimports for animation library (#151011)
docimports for references in doc comments on library statements now work!

Part of https://github.com/flutter/flutter/issues/150800
2024-07-01 18:25:10 +00:00
Matthias Ngeo
c11ff3bbd8
Fix missing [ in docs (#151091)
This is a trivial fix for a typo in the docs.
2024-07-01 17:49:49 +00:00
Tim Lehmann
f5b671aac7
Draggable feedback positioning (#149040)
Reopened after revert in #147658

Another test was added in the meantime to `draggable_test.dart` that
didn't call `gesture.up()`. I added this call to the test and now all
tests pass.

---
# Original Description (#145647):
We changed the coordinates used to position the `Draggable` feedback by
transforming them into the `Overlay`s coordinate space. This has no
influence on any untransformed `Overlay`, most Flutter apps should be
not affected.
This PR fixes the positioning of the feedback in transformed context
(see #145639 for before video):


https://github.com/flutter/flutter/assets/42270125/df34e198-0667-453d-a27a-a79b2e2825a1

- fixes #145639 

## 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/wiki/Tree-hygiene#overview
[Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene
[test-exempt]:
https://github.com/flutter/flutter/wiki/Tree-hygiene#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#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/wiki/Tree-hygiene#handling-breaking-changes
[Discord]: https://github.com/flutter/flutter/wiki/Chat
[Data Driven Fixes]:
https://github.com/flutter/flutter/wiki/Data-driven-Fixes

---------

Co-authored-by: Jesper Bellenbaum <ayu4ger@gmail.com>
2024-06-28 11:14:20 -07:00
hangyu
5bf0192f58
[a11y] Reland [#149375 ] Update semantics in dropdown.dart (#150578)
issue: https://github.com/flutter/flutter/issues/117997 

This is a partial reland of
https://github.com/flutter/flutter/pull/149375 with updated g3fix
cl/642457545
## 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
2024-06-27 10:52:48 -07:00
Yegor
ef34436402
add onFocus to text fields (#150648)
Adds `onFocus` support to Cupertino and Material text field widgets (similar to https://github.com/flutter/flutter/pull/142942).
2024-06-27 14:38:32 +00:00
Ricardo Boss
805d79607e
Copy any previous IconThemeData instead of overwriting it in CupertinoButton (#149777)
This changes how the `IconThemeData` is passed to the child of `CupertinoButton`.

Previously, it would derive the foreground color from the current theme and create a new `IconThemeData` object.
This causes any `IconThemeData` to be overwritten.

This change uses `IconTheme.of` to get the currently applied icon theme and only overwrites the properties provided by the `CupertinoButton` instead of the whole object.

Fixes #149172.
2024-06-27 03:53:58 +00:00
Hans Muller
e4c18b702a
Improve the behavior of scrollbar drag-scrolls triggered by the trackpad (#150275)
Corrects some problems related to trackpad scrolls introduced by https://github.com/flutter/flutter/pull/146654.

Fixes https://github.com/flutter/flutter/issues/149999
Fixes #150342
Fixes https://github.com/flutter/flutter/issues/150236
2024-06-27 00:50:26 +00:00
FernTheDev
e706d7d0b7
feat: Add autofocus for MenuItemButton (#139396)
MenuAnchor for Material 3 is great for contextual menus but there are some minor issues related to accessibility.
This PR aims to close the gap by adding `autofocus` to the menu item button so keyboard navigation is more intuitive. Otherwise, it becomes a mess to navigate through just keyboards.

Partially resolves #139395

## Additional Notes

I should mention, I have not written tests for this due to it's trivial nature. I also lack the experience of writing Flutter tests in general, so if someone feels inclined to take over this PR and add it they're welcome to.
2024-06-27 00:46:40 +00:00
Michael Goderbauer
776efc20d8
Adding @docImports to the animation library (#150798)
Part of https://github.com/flutter/flutter/issues/150800.

I turned on the `comment_references` lint and looked at what needed fixing inside of the `animation` library.

There are a couple of places where for some reason adding a docImport didn't fix the `comment_references` warning:
2024-06-26 23:12:05 +00:00