10263 Commits

Author SHA1 Message Date
Greg Spencer
a257efc284
Fix handling of AppLifecycleState.hidden (#127987)
## Description

This fixes the parsing of `AppLifecycleState` in the services binding so that it knows what it is.

## Related Issues
 - Fixes https://github.com/flutter/flutter/issues/127974

## Tests
 - Added a test that causes parsing of all the different app lifecycle states.
2023-05-31 22:03:06 +00:00
Tae Hyung Kim
5fd9ef4240
Fix SliverPersistentHeader interactions with SliverCrossAxisGroup (#127338)
This PR fixes `SliverCrossAxisGroup` so that once we calculate the total `scrollExtent` of the `SliverCrossAxisGroup`, we ensure that any child sliver is not painted outside of the "scroll extent" of the sliver group.

https://github.com/flutter/flutter/assets/2004742/670dc6f9-a3c6-4bcc-85d3-576cf7f33c6a

https://github.com/flutter/flutter/assets/2004742/0c9cd951-c133-4a8b-9e5e-89d0a69a4f59

Fixes #126958.
Fixes #126957.
2023-05-31 22:01:06 +00:00
Renzo Olivares
83f19be250
Fix bottom sheet rebuilding when tapping (#127526)
This fixes an issue where the bottom sheet would rebuild when `enableDrag` is set to true on every tap. This is because `DragGestureRecognizer` would win the arena by default and dispatch the `drag` callbacks (in `acceptGesture`) even though it had not met the drag threshold. This changes keep the default behavior of `DragGestureRecognizer` the same, but adds a parameter `onlyAcceptDragOnThreshold` that a user can use to stop drag callbacks from being fired when the drag threshold has not been met.

Fixes #126833
2023-05-31 20:21:55 +00:00
hangyu
a829b579d6
Add a FocusSemanticEvent (#126171)
issue: #94523
engine pr: https://github.com/flutter/engine/pull/41777
2023-05-31 20:15:52 +00:00
Tomasz Gucio
ab3602b7df
Use paragraph getter in TextPainter (#127607) 2023-05-31 12:14:16 +02:00
Ian Hickson
1309f977be
Clarify PointerSignalResolver.register (#127605) 2023-05-31 01:54:20 +00:00
Tomasz Gucio
90afc5e854
Take paint offset into account for Editable children (#127843) 2023-05-30 19:32:10 +02:00
chunhtai
2f521a2143
Increases the eyeballed value of auto scroll velocity scalar (#127410)
A previous pr fixed an bug in the autoscalar's speed calculation. The calculation would produce much lower speed after the fix. This pr raised the default scalar value for reorderable list.

fixes https://github.com/flutter/flutter/issues/121603
2023-05-30 17:28:19 +00:00
Matheus Kirchesch
f1c8723a10
Added option to disable [NavigationRailDestination]s (#127113) 2023-05-30 08:38:05 -07:00
Taha Tesser
9bce790162
Updated the ToggleButtons API doc to link to SegmentedButton (#127021)
fixes https://github.com/flutter/flutter/issues/124884
2023-05-27 00:27:19 +00:00
LongCatIsLooong
b5df180a6f
Move shared inline widget logic to RenderInlineWidgetContainerDefaults (#127308)
- Added `InlineWidgetContainerDefaults` for deduping inline widget code
- Added a helper function `WidgetSpan.extractFromInlineSpan` for extracting `WidgetSpan`s and automatically applying text scaling (at widget level)
- Removed `TextPainter.inlinePlaceholderScales`. I'm going to deprecate the `scale` argument in `TextPainter.addPlaceholder` next, as scaling is now done at the widget level.
- Added runtime check and comments to make sure nobody is extending `PlaceholderSpan` directly (unfortunately we can't remove `PlaceholderSpan`  without moving RenderEditable and RenderParagraph to the widgets library).
2023-05-26 23:47:33 +00:00
Phil Quitslund
5bf6318688
Update collection-fors to prefer final (as per updated prefer_final_in_for_each) (#127511)
The newly updated lint will soon flag for-each in collections.

See discussion: https://github.com/dart-lang/linter/pull/4383

/cc @goderbauer
2023-05-26 23:34:36 +00:00
Greg Spencer
0da6f04f07
Remove references to deprecated ThemeData.primaryColorBrightness (#127238)
## Description

Removes references to `ThemeData.primaryColorBrightness`, deprecated in https://github.com/flutter/flutter/pull/93396 and subject to remove now because of our [deprecation policy](https://github.com/flutter/flutter/wiki/Tree-hygiene#deprecations).

## Related PRs
 - https://github.com/flutter/flutter/pull/93396

## Tests
 - Removed unneeded tests, removed references.
2023-05-26 22:33:58 +00:00
Kate Lovett
0f1a95d19e
TwoDimensional scrolling foundation (#125437)
From the 2D scrolling proposal: [flutter.dev/go/2D-Foundation](https://flutter.dev/go/2D-Foundation) ✅  updated 4/25

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

Follow up issues:
- https://github.com/flutter/flutter/issues/126297
- https://github.com/flutter/flutter/issues/126298
- https://github.com/flutter/flutter/issues/126299
-  https://github.com/flutter/flutter/issues/122348

This adds a mostly abstract foundation for 2D scrolling in Flutter.

With these base classes, developers will be able to construct widgets that scroll in both dimensions and can lazily load their children for the best performance. This implementation is meant to be flexible in order to support different kinds of 2D compositions, from tables to scatter plots. 

The upcoming TableView, TreeView, etc widgets (coming soon in flutter/packages) are built on top of this foundation.
2023-05-26 22:22:21 +00:00
Qun Cheng
a4de77a239
Remove button announcement for MenuItemButton and SubmenuButton (#127620) 2023-05-26 13:23:45 -07:00
Taha Tesser
5d555eb234
Add M3 date range picker tests and fix header background theme color (#127662) 2023-05-26 13:08:45 -07:00
fzyzcjy
c1558f6979
Fix TextField error in production environment because it wrongly uses ancestor render boxes (#126324)
Fixes a crash in a reparented TextField due to frame render phase timing
2023-05-26 10:49:37 -07:00
Jonathan Green
28605398ec
Interactive viewer doesn't appear to respect the trackpadScrollCausesScale parameter (#127114)
Fix a bug when using InteractiveViewer.trackpadScrollCausesScale
2023-05-26 10:45:56 -07:00
LongCatIsLooong
56808b486d
Remove a bad assert from tooltip implementation (#127629)
Fixes https://github.com/flutter/flutter/issues/127575

The `_handleMouseEnter` and `_handleMouseExit` calls are balanced, but the tooltip could be dismissed by an external `PointerDown` event interacting with a different UI component so the ` assert(_activeHoveringPointerDevices.isNotEmpty);` does not really make sense.
2023-05-26 00:29:27 +00:00
LongCatIsLooong
43de3365f5
Remove rounding from TextPainter (#127099)
To opt-in, run the tests with: `SKPARAGRAPH_REMOVE_ROUNDING_HACK=1 flutter test --dart-define=SKPARAGRAPH_REMOVE_ROUNDING_HACK=1 `

Migration plans:
1. Turn the flags on in CI, migrate customer tests if needed
1. Migrate internal customers
2. Remove the flag from skparagraph. Remove the framework flag with a manual engine roll.

Also fixes https://github.com/flutter/flutter/issues/52038
2023-05-26 00:09:51 +00:00
Qun Cheng
9fa351807f
SearchBar should not be impacted by overall InputDecorationTheme (#127465) 2023-05-25 12:28:26 -07:00
Dan Field
a21f33e7ad
avoid incorrect usage of TimelineTask (#127527)
This code was added based on a misunderstanding of the API surface.
2023-05-25 09:17:02 -07:00
Taha Tesser
c05a05e6fc
Add ScrollNotificationObserver sample (#127023)
fixes https://github.com/flutter/flutter/issues/126702

### Preview

https://github.com/flutter/flutter/assets/48603081/4c529a0d-b8a5-4950-9095-429f1c5eccbb
2023-05-25 15:58:52 +00:00
LongCatIsLooong
1b800fd496
Remove Tooltip mouse tracker listener & update hovering/MouseRegion logic & animation (#119199)
Fixes https://github.com/flutter/flutter/issues/117627

### Behavior changes:
1. If fade in/fade out animation is already in progress, hiding/showing the tooltip will immediately take effect without waiting for `waitDuration`.
2. A PointerDownEvent that doesn't become a part of a "trigger" gesture dismisses the tooltip, even for hovered ones.
3. The OverlayEntry is now updated only when the previous tooltip was completely dismissed. This can be fixed by OverlayPortal but I'm not sure what the correct behavior is.
2023-05-25 07:24:45 +00:00
Mouad Debbar
2d142c5ba2
[web] ui.platformViewRegistry => ui_web.platformViewRegistry (#127493)
Now that `platformViewRegistry` is [exposed](https://github.com/flutter/engine/pull/41877) through `dart:ui_web`, we can do some cleanup here.

Part of https://github.com/flutter/flutter/issues/126831
2023-05-24 23:31:28 +00:00
lsaudon
7827a24207
Add missing parameters in TextFormField (#127020)
`TextFormField` does not have all the parameters of `TextField`.

Added:
```dart
    UndoHistoryController? undoController,
    AppPrivateCommandCallback? onAppPrivateCommand,
    bool? cursorOpacityAnimates,
    ui.BoxHeightStyle selectionHeightStyle = ui.BoxHeightStyle.tight,
    ui.BoxWidthStyle selectionWidthStyle = ui.BoxWidthStyle.tight,
    DragStartBehavior dragStartBehavior = DragStartBehavior.start,
    ContentInsertionConfiguration? contentInsertionConfiguration,
    Clip clipBehavior = Clip.hardEdge,
    bool scribbleEnabled = true,
    bool canRequestFocus = true,
```
2023-05-24 23:06:52 +00:00
LongCatIsLooong
62e78bf143
Improve TextPainter.layout caching (#118128)
Improves `TextPainter.layout` caching when only the input constraints change: 
- removes the double layout calls in `TextPainter._layoutParagraph`: now double layout is only needed when `TextAlign` is not left, and the input `maxWidth == double.infinity`.  
- skip calls to `ui.Paragraph.layout` when it's guaranteed that there's no soft line breaks before/after the layout call.

This doesn't introduce new APIs but may slightly shift text rendered on screen.
This reduces the number of `layout` calls but since shaping results are already cached so it only skips the relatively cheap line-breaking process when possible.

528 scuba failures but all of them seem reasonable.
2023-05-24 22:38:52 +00:00
Bruno Leroux
2b105ac6dd
Fix ScrollPosition overscroll precision error (#127321)
## Description

This PR fixes a precision error in ~~`ClampingScrollPhysics`~~ `ScrollPosition` that leads to `StretchingOverscrollIndicator` stretching its content unexpectedly in some devices (see  https://github.com/flutter/flutter/issues/126561 where this is visible in `TabBarView` and the test added in this PR where it reproduces with a `PageView`).

~~This PR also contains a change to `nested_scroll_view.dart` because the first change (the one in `ClampingScrollPhysics`)  breaks the precision error test added by https://github.com/flutter/flutter/pull/87801.~~

## Related Issue

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

## Tests

Adds 1 test.
2023-05-24 22:34:06 +00:00
Devin
5451ea6e8f
Slider.onChangeStart & Slider.onChangeEnd are not called on keyboard shortcuts (#126896)
fixes https://github.com/flutter/flutter/issues/123315
--------

This PR makes changes to the _actionHandler function used on the Slider.Dart Widget for Key Events. It ensures onChangeStart is called at the beginning of a Key Event and onChangeEnd at the end of one. This PR includes a test for the changes made.
I ran all existing tests after my changes were made and they passed.
2023-05-24 22:13:15 +00:00
Sun Jiao
7b67aa587a
make suggestionsBuilder in SearchAnchor asyncable (#127019) 2023-05-24 13:12:47 -07:00
NikolajHarderNota
c84b10474c
modal bottom sheet barrier label (#126431)
Adds barrierLabel as optional param in showModalBottomSheet

Fixes #83180
2023-05-23 18:59:49 +00:00
Justin McCandless
4341ed4229
Fix the breaking of multi-code-unit characters in obscure mode (#123366)
This PR changes the character boundary behavior of obscured fields to be based on code points instead of code units.

So it used to be possible to traverse and delete obscured text inside of code points (and breaking a code point like that would cause a crash):

![output2](https://github.com/flutter/flutter/assets/389558/674c89a4-c47d-4cdc-a402-4cadb5d2f73b)

But now moving the cursor and deleting is based on code points:

![output1](https://github.com/flutter/flutter/assets/389558/e46301f7-b5af-48d2-812a-0ad649f1383b)

### Native behavior

Native iOS deletes part of the emoji, native Mac deletes the whole emoji.  See https://github.com/flutter/flutter/issues/122381#issuecomment-1482042620.  So it's unclear what the desired behavior should actually be.

### Resources

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

I thought this might not fix the case where a broken emoji is directly pasted into the field, but it seems to work by trying this:  �‍👩‍👦‍👦

CC @LongCatIsLooong
2023-05-23 18:21:10 +00:00
Taha Tesser
fe32675b54
Add M3 date picker tests and fix divider (#127197)
partial fix https://github.com/flutter/flutter/issues/126826 (date range picker is another PR)
fixes https://github.com/flutter/flutter/issues/126597

### Description

1. This PR adds a bunch of M3 date picker tests
2. Fixes divider taking more space than it should
3. Added dividerColor  theme value to allow users to customise divider color just for the date pickers from date picker theme 

<details> 
<summary>code sample</summary> 

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        datePickerTheme: DatePickerThemeData(
          headerBackgroundColor: Colors.amber,
        ),
        useMaterial3: true,
      ),
      home: Scaffold(
        body: Builder(builder: (BuildContext context) {
          return Center(
            child: ElevatedButton(
              onPressed: () async {
                showDatePicker(
                  context: context,
                  initialDate: DateTime(2016, DateTime.january, 15),
                  firstDate: DateTime(2001),
                  lastDate: DateTime(2031, DateTime.december, 31),
                );
              },
              child: const Text('Show Date Picker'),
            ),
          );
        }),
      ),
    );
  }
}
``` 
	
</details>

### Before
![Screenshot 2023-05-19 at 17 32 19](https://github.com/flutter/flutter/assets/48603081/4463de1a-fb94-4930-a6ab-8245331a8134)

### After
![Screenshot 2023-05-19 at 17 51 15](https://github.com/flutter/flutter/assets/48603081/296276f0-cf13-4a59-8542-a46da774153b)
2023-05-23 07:29:20 +00:00
Daniel Iglesia
a6d62ca8de
Support keeping a bottom sheet with a DraggableScrollableSheet from closing on drag/fling to min extent (#127339) 2023-05-22 16:14:35 -07:00
Victor Ohashi
7e3f1df36c
fix: Search anchor box location when used on nested navigator (#127198)
This PR is to fix the position of `SearchAnchor` when used with nested navigator. This solution is based on what `DropdownButton` internally do, looking to the closest `Navigator` to proper calculate the where to render `SearchViewRoute`.

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

<details>
<summary>Test case</summary>

```dart
void main() => runApp(const NestedSearchBarApp());

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

  @override
  State<NestedSearchBarApp> createState() => _NestedSearchBarAppState();
}

class _NestedSearchBarAppState extends State<NestedSearchBarApp> {
  final SearchController controller = SearchController();

  @override
  Widget build(BuildContext context) {
    final ThemeData themeData = ThemeData(useMaterial3: true);

    return MaterialApp(
      theme: themeData,
      builder: (BuildContext context, Widget? child) {
        return Scaffold(
          body: Row(
            children: <Widget>[
              NavigationRail(
                selectedIndex: 1,
                destinations: const <NavigationRailDestination>[
                  NavigationRailDestination(
                    icon: Icon(Icons.favorite_border),
                    selectedIcon: Icon(Icons.favorite),
                    label: Text('First'),
                  ),
                  NavigationRailDestination(
                    icon: Icon(Icons.bookmark_border),
                    selectedIcon: Icon(Icons.book),
                    label: Text('Second'),
                  ),
                ],
              ),
              const VerticalDivider(thickness: 1, width: 1),
              Expanded(child: child!)
            ],
          ),
        );
      },
      home: Scaffold(
        appBar: AppBar(title: const Text('Search Anchor Sample')),
        body: Column(
          children: <Widget>[
            SearchAnchor(
                searchController: controller,
                builder: (BuildContext context, SearchController controller) {
                  return IconButton(
                    icon: const Icon(Icons.search),
                    onPressed: () {
                      controller.openView();
                    },
                  );
                },
                suggestionsBuilder:
                    (BuildContext context, SearchController controller) {
                  return List<ListTile>.generate(5, (int index) {
                    final String item = 'item $index';
                    return ListTile(
                      title: Text(item),
                      onTap: () {
                        setState(() {
                          controller.closeView(item);
                        });
                      },
                    );
                  });
                }),
            Center(
              child: controller.text.isEmpty
                  ? const Text('No item selected')
                  : Text('Selected item: ${controller.value.text}'),
            ),
          ],
        ),
      ),
    );
  }
}
```
</details>

<details>
<summary>Before fix:</summary>

![Screenshot 2023-05-19 at 11 55 53](https://github.com/flutter/flutter/assets/38299943/c86747e5-6716-4e87-b3fd-ce7f0f943b92)
</details>

<details>
<summary>After fix:</summary>

![Screenshot 2023-05-19 at 11 53 30](https://github.com/flutter/flutter/assets/38299943/d790ee49-e047-485c-87f4-7254acbdddfa)
</details>
2023-05-22 20:21:26 +00:00
Gil Nobrega
7b16cbcb57
Do not animate TabBarView if controller is invalid (#123442) 2023-05-19 16:43:40 -07:00
Phil Quitslund
d0c0439b8d
fixes to anticipate next Dart linter release (#127211)
The upcoming linter release notices null literals as unnecessary argument values and flags more `type_literal_in_constant_pattern` cases. 

See breakages: https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket/8780744067138629361/+/u/analyze_flutter_flutter/stdout
2023-05-19 21:27:24 +00:00
Kate Lovett
e8b7889dfd
Remove deprecated OverscrollIndicatorNotification.disallowGlow (#127050)
The deprecated OverscrollIndicatorNotification.disallowGlow has expired and is removed in the PR. The replacement is OverscrollIndicatorNotification.disallowIndicator. This deprecation was introduced in https://github.com/flutter/flutter/pull/87839 when the StretchingOverscrollIndicator was added. The name change made it clearer since there is now more than one overscroll indicator.

This change is supported by dart fix. ✅ 

Part of https://github.com/flutter/flutter/issues/127042
2023-05-19 19:40:51 +00:00
chunhtai
ea5cfe09fd
Properly cleans up routes (#126453)
fixes https://github.com/flutter/flutter/issues/126100
2023-05-19 00:32:26 +00:00
Qun Cheng
af83c76723
Remove deprecated primaryVariant and secondaryVariant from ColorScheme (#127124)
This PR is to remove deprecated `primaryVariant` and `secondaryVariant` from framework. These two apis are made obsolete in #93427

Part of https://github.com/flutter/flutter/issues/127042
2023-05-19 00:26:53 +00:00
Qun Cheng
be40991082
Update useMaterial3 api doc (#127142)
This is to update the components section for `useMaterial3` api doc.
2023-05-18 23:34:07 +00:00
Mahdi Bagheri
434b81f1a5
Fixing richMessage gesture recognizer in tooltip widget (#126207)
Fixing #126206 and #113388 issues

*The IgnorePointer is preventing the richMessage touch events being recognized. Just removing that from*

*Solves #126206 and #113388*
2023-05-18 18:32:22 +00:00
Michael Goderbauer
5ae6438157
Revert "Handle null return from WillPopCallback" (#127112)
Reverts flutter/flutter#127039

Google3 has been fixed, so this work around is no longe necessary.
2023-05-18 17:47:54 +00:00
Justin McCandless
6071f149b5
Revert "Remove obsolete drawShadow bounds workaround" (#127110)
Reverts flutter/flutter#127052, which seems to be breaking the build
because of a goldens failure.

```
The following TestFailure was thrown running a test:
Expected: one widget whose rasterized image matches golden image "shadow.PhysicalModel.enabled.png"
  Actual: _WidgetTypeFinder:<exactly one widget with type "Container" (ignoring offstage widgets):
Container(bg: Color(0xfffff59d), margin: EdgeInsets.all(150.0))>
```

See
https://ci.chromium.org/ui/p/flutter/builders/prod/Linux%20web_tests_6/11051/overview
2023-05-18 09:05:07 -07:00
Qun Cheng
f31dae2a80
Clip search view content during animation (#126975)
Fixes #126590

This PR is to clip the view content when the view size is not big enough, such as during animation.
Also removes some unused properties in `_ViewContent` class: `getRect` and `viewConstraints`
2023-05-18 00:18:51 +00:00
Jim Graham
8089a309a9
Remove obsolete drawShadow bounds workaround (#127052)
This workaround was created 6 years ago with no links to bug databases to track. As best we can determine, the issue is no longer present in SkPicture or DisplayList and is most likely obsolete. More importantly, though, non-rendering primitives are ignored by the DisplayList construction and so this workaround will just be ignored anyway. If a problem surfaces about this issue that we haven't discovered by a thorough code search of the current code base, then workarounds should be installed within the relevant implementation modules rather than in the framework (and documented with bugs filed in either or both of Flutter's github repos, and/or the Skia issue database).

Workaround originally created in this PR: https://github.com/flutter/flutter/pull/9654
2023-05-18 00:17:33 +00:00
Renzo Olivares
d44d657ade
Remove deprecated fixTextFieldOutlineLabel (#125893)
The deprecation period has elapsed. The method was made obsolete in https://github.com/flutter/flutter/pull/87281.
2023-05-17 22:56:14 +00:00
Sam Rawlins
7a32504531
Ignore unused_element_parameter (#126926)
When the analyzer detects an unused parameter, it reports `unused_element` which can be ignored with an inline ignore like `// ignore: unused_element`. The analyzer will start reporting instead, `unused_element_parameter`. There are ignores in flutter/flutter that need to be updated to the new code. In order to incrementally migrate, they can be changed to `// ignore: unused_element, unused_element_parameter`.

After flutter/flutter is using a new enough analyzer, we can then change those to `// ignore: unused_element_parameter`.

Work towards https://github.com/flutter/flutter/issues/126924
2023-05-17 21:16:24 +00:00
Michael Goderbauer
acbfb40f05
Handle null return from WillPopCallback (#127039)
Partial revert of https://github.com/flutter/flutter/pull/126647 to work around issue in google3.

See b/283046390
2023-05-17 17:50:36 +00:00
Michael Goderbauer
0bd275fe66
Remove unused (and untested) parameters from private _MasterDetailFlow (#126935)
Follow-up to https://github.com/flutter/flutter/pull/126926.
2023-05-17 17:06:18 +00:00