12218 Commits

Author SHA1 Message Date
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
Tomasz Gucio
25d2f90a59
Avoid catching errors in TextPainter tests (#127307) 2023-05-23 21:20:59 +02: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
Justin McCandless
9d882983ff
Autocomplete async examples (#126283)
Added examples clarifying how to fetch Autocomplete options asynchronously.
2023-05-17 09:46:26 -07:00
JellyO1
561169ec67
Expose callback that allows focus traversal customization (#120235)
This PR exposes a requestFocusCallback on `FocusTraversalPolicy` and it's inheritors.

Fixes #83175.
2023-05-17 16:43:50 +00:00
Taha Tesser
160618b103
Add missing Switch.onFocusChange test (#126685) 2023-05-17 08:36:24 -07:00
Ian Hickson
027bb84444
Make SlottedMultiChildRenderObjectWidgetMixin a concrete class (#126108)
This is a proof of concept for renaming SlottedMultiChildRenderObjectWidgetMixin to SlottedMultiChildRenderObjectWidget and making it a concrete class.

I also made SlottedContainerRenderObjectMixin generic instead of being specialized to RenderBox.

I don't think this is something we can easily automigrate, but we may not need to, I don't know how common this is...
2023-05-16 22:28:54 +00:00
Ian Hickson
5235a0f092
Add ScrollMetrics.extentTotal for completeness (#126607)
When implementing scrollbars, I found that it would be useful and idiomatic to be able to do `m.extentInside / m.extentTotal` to get the scrollbar thumb size.
2023-05-16 22:24:03 +00:00
Mitchell Goodwin
678f40cf04
Add checkmark style to CupertinoRadio (#126480)
Fixes: #102813

Adds a checkmark style to the Cupertino Radio. Also allows the Radio.adaptive and RadioListTile.adaptive widgets to control whether they use the checkmark style for their Cupertino widgets or not.

This is how it looks in action:

https://github.com/flutter/flutter/assets/58190796/b409b270-42dd-404a-9350-d2c3e1d7fa4e
2023-05-16 21:54:20 +00:00
Jason Simmons
e24c64d8ee
Fix DataTableThemeData.copyWith handling of dataRowHeight (#126943)
Fixes https://github.com/flutter/flutter/issues/126676
2023-05-16 21:44:24 +00:00
Mushaheed Syed
60751ca519
Fix copyWith method of ActionIconThemeData (#126763)
Fixes copyWith method of ActionIconThemeData, now using blank copyWith on [ActionIconThemeData] object that isn't `const ActionIconThemeData()` returns object with same values.

*List which issues are fixed by this PR.*
Fixes https://github.com/flutter/flutter/issues/126762
2023-05-16 21:38:23 +00:00
Michael Goderbauer
1ca183d55b
Remove outdated comment (#126927)
Follow-up to https://github.com/flutter/flutter/pull/126647#discussion_r1195417860.
2023-05-16 17:39:12 +00:00
yaakovschectman
130944e785
Alert engine upon registering ServiceBinding (#126075)
Send a platform message to the engine when the `ServiceBinding` is
registered. Framework side of
https://github.com/flutter/engine/pull/41733

Addresses https://github.com/flutter/flutter/issues/126033

## 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 `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [ ] All existing and new tests are passing.

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

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

---------

Co-authored-by: Greg Spencer <gspencergoog@users.noreply.github.com>
2023-05-16 13:37:12 -04:00
Jason Simmons
a3b38aa8f3
Update SemanticsUpdateBuilderSpy for the conversion of SemanticsUpdateBuilder into a base class (#126570)
See https://github.com/flutter/flutter/issues/123756
2023-05-16 16:41:11 +00:00
st merlhin
6753a852d0
expose CupertinoDatePicker and CupertinoTimerPicker itemExtent … (#125852)
…property

This PR expose `CupertinoDatePicker` and `CupertinoTimerPicker` `itemExtent` property to allow setting custom one depending on `tMediaQuery.of(context).textScaleFactor`.
Fixes: #125127
2023-05-16 16:30:08 +00:00
Michael Goderbauer
5e1ba701ed
enable no_literal_bool_comparisons lint (#126647) 2023-05-16 16:14:23 +00:00
Taha Tesser
2f5ed33912
Updated the Drawer API doc to link to NavigationDrawer (#126915)
fixes https://github.com/flutter/flutter/issues/124887
2023-05-16 15:45:09 +00:00
Polina Cherkasova
ea5eddb5a9
Upgrade leak_tracker to 5.0.0 (#126367)
Fixes https://github.com/flutter/flutter/issues/126259

Updated pubspec:
345f0bffbf/packages/flutter/pubspec.yaml
2023-05-16 04:39:26 +00:00