24361 Commits

Author SHA1 Message Date
Jonah Williams
f7869a4799
[flutter_tools] opt iOS/macOS apps out of Metal API validation via migrator, update templates in repo. (#159228)
Setting "enableGPUValidationMode = "1"" disables Metal API validation. I
know, I know.

Fixes https://github.com/flutter/flutter/issues/159227
2024-11-21 01:36:55 +00:00
Justin McCandless
b473698019
Scribe Android handwriting text input (#148784)
Enables the Scribe feature, or Android stylus handwriting text input.


![scribe](https://github.com/flutter/flutter/assets/389558/25a54ae9-9399-4772-8482-913ec7a9b330)

This PR only implements basic handwriting input. Other features will be
done in subsequent PRs:

 * https://github.com/flutter/flutter/issues/155948
 * https://github.com/flutter/flutter/issues/156018

I created and fixed issue about stylus hovering while working on this:
https://github.com/flutter/flutter/issues/148810

Original PR for iOS Scribble, the iOS version of this feature:
https://github.com/flutter/flutter/pull/75472
FYI @fbcouch 

~~Depends on https://github.com/flutter/engine/pull/52943~~ (merged).

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

<details>

<summary>Example code I'm using to test this feature (but any TextField
works)</summary>

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

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MyHomePage(),
    );
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final FocusNode _focusNode1 = FocusNode();
  final FocusNode _focusNode2 = FocusNode();
  final FocusNode _focusNode3 = FocusNode();
  final TextEditingController _controller3 = TextEditingController(
    text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Scribe demo'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.symmetric(horizontal: 74.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              TextField(
                focusNode: _focusNode1,
                autofocus: false,
              ),
              TextField(
                focusNode: _focusNode2,
              ),
              TextField(
                focusNode: _focusNode3,
                minLines: 4,
                maxLines: 4,
                controller: _controller3,
              ),
              TextButton(
                onPressed: () {
                  _focusNode1.unfocus();
                  _focusNode2.unfocus();
                  _focusNode3.unfocus();
                },
                child: const Text('Unfocus'),
              ),
              TextButton(
                onPressed: () {
                  _focusNode1.requestFocus();
                  SchedulerBinding.instance.addPostFrameCallback((Duration _) {
                    SystemChannels.textInput.invokeMethod('TextInput.hide');
                  });
                },
                child: const Text('Focus 1'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
```

</details>

---------

Co-authored-by: Nate Wilson <nate.w5687@gmail.com>
2024-11-21 01:33:14 +00:00
Matan Lurey
5ead4e15a7
Terminate non-detached test devices on flutter run completion (#159170)
See https://github.com/flutter/flutter/issues/159154.
See https://github.com/flutter/flutter/pull/159169.

Before this PR, it appeared we were accidentally leaking (keeping
active) `flutter_tester` instances (or any test device) after `flutter
run` completion, even if the runner was not explicitly detached. I
_think_ this is a bug, but I'll check with the tools team and possibly
@jonahwilliams before finalizing this.

/cc @jason-simmons

---------

Co-authored-by: Andrew Kolos <andrewrkolos@gmail.com>
2024-11-21 01:21:25 +00:00
Matan Lurey
1d24fa8f60
Un-skip tests that use flutter build apk. (#159231)
Closes https://github.com/flutter/flutter/issues/158560.

I believe but am not sure as of
https://github.com/flutter/flutter/pull/159170 merging, many process
flakes that were consuming memory and in turn, making Gradle
particularly sensitive to timing out or being killing by the OS for
low-memory, have been rectified.

It is possible there are additional problems, but they aren't visible at
the moment.

I'd like to re-enable these and keep tracking their stability.
2024-11-21 01:13:50 +00:00
StanleyCocos
3f1ea760e8
Fix: The enableFeedback property of InkWell cannot be set to a nullab… (#158907)
*I found that enableFeedback can be set to null, but in actual use,
setting it to null has no effect and is overwritten by true. I think
this is an issue.*


```dart
class InkWell extends InkResponse {
  const InkWell({
    super.key,
    super.child,
    super.onTap,
    super.onDoubleTap,
    super.onLongPress,
    super.onTapDown,
    super.onTapUp,
    super.onTapCancel,
    super.onSecondaryTap,
    super.onSecondaryTapUp,
    super.onSecondaryTapDown,
    super.onSecondaryTapCancel,
    super.onHighlightChanged,
    super.onHover,
    super.mouseCursor,
    super.focusColor,
    super.hoverColor,
    super.highlightColor,
    super.overlayColor,
    super.splashColor,
    super.splashFactory,
    super.radius,
    super.borderRadius,
    super.customBorder,
    bool? enableFeedback = true,
    super.excludeFromSemantics,
    super.focusNode,
    super.canRequestFocus,
    super.onFocusChange,
    super.autofocus,
    super.statesController,
    super.hoverDuration,
  }) : super(
    containedInkWell: true,
    highlightShape: BoxShape.rectangle,
    enableFeedback: enableFeedback ?? true,
  );
}
```

Call Error
```dart
InkWell(
    enableFeedback: null,
)
```
2024-11-20 19:23:24 +00:00
Martin Kustermann
e2d8121708
Remove dependency on [Target] and instead operate on [Architecture] (#159196)
The dart-lang/native repository contains a `Target` class that is almost
not needed anymore. The remaining uses are mainly due to kernel asset
mapping (which we may be able to remove in the future).

This PR removes usages of that `Target` (in favor of `Architecture`)
class in most places in flutter tools.
This makes the code also cleaner because we no longer have an implicit
assumption that
a `List<Target>` all belong to the same operating system.
2024-11-20 12:44:43 +00:00
Matan Lurey
1fdcb757fd
Make runner non-nullable as it always is. (#159156) 2024-11-20 00:11:39 +00:00
Taha Tesser
1686fa7eb4
Update Material 3 CircularProgressIndicator for new visual style (#158104)
Related [Update both `ProgressIndicator` for Material 3
redesign](https://github.com/flutter/flutter/issues/141340)
Fixes [Issue: Cannot theme progress indicators, many properties
missing](https://github.com/flutter/flutter/issues/131690)
Fixes [Cannot override default `CircularProgressIndicator`
size](https://github.com/flutter/flutter/issues/158106)

### Code sample

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

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

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

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

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

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
          // progressIndicatorTheme: const ProgressIndicatorThemeData(
          //   constraints: BoxConstraints.tightFor(width: 100, height: 100),
          //   strokeWidth: 12
          // ),
          ),
      home: Scaffold(
        appBar: AppBar(title: const Text('CircularProgressIndicator')),
        body: const Center(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              CircularProgressIndicator(year2023: false, value: 0.5),
              CircularProgressIndicator(year2023: false),
            ],
          ),
        ),
      ),
    );
  }
}
```

</details>

### Preview 

<img width="579" alt="Screenshot 2024-11-04 at 16 01 57"
src="https://github.com/user-attachments/assets/d27768c6-5570-48d0-9eed-565e02be8041">

### New custom `CircularProgressIndicator.constraints` and stroke  width

<img width="579" alt="Screenshot 2024-11-04 at 16 02 40"
src="https://github.com/user-attachments/assets/c67c4a31-58f4-4f82-bfb6-f1b78a000bac">


## 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
2024-11-19 23:23:26 +00:00
Mohellebi abdessalem
f0dc0b798f
fix lint usage of task inside resolve_dependecies.gradle file (#158022)
according to
[Gradle](https://docs.gradle.org/current/userguide/task_configuration_avoidance.htmll)
:`As of Gradle 5.1, we recommend that the configuration avoidance APIs
be used whenever tasks are created.`

![writing-tasks-4](https://github.com/user-attachments/assets/407c79bb-7bfa-4bea-9b13-dec01c60dc1c)
what android studio lint is failing ?
![Capture d’écran 2024-11-01
214856](https://github.com/user-attachments/assets/af745305-6310-406c-b427-fb8a5dd5755c)


## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2024-11-19 20:32:05 +00:00
Mohellebi abdessalem
1d01955721
Removing redundant backticks in flutter\packages\flutter_tools\gradle\gradle.kts (#159051)
`what android studio lint is failing ?`

![Capture d’écran 2024-11-19
110315](https://github.com/user-attachments/assets/d86605f6-0060-4721-9233-09d8ec5774d4)

![Capture d’écran 2024-11-19
110338](https://github.com/user-attachments/assets/7ee7465e-7a06-43db-bebb-ca87dda3cdc8)
see #147122
## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [ ] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [ ] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2024-11-19 19:32:22 +00:00
Mairramer
fc53c71381
Fixes initial validation with AutovalidateMode.always on first build (#156708)
Fixes #142701
This PR fixes an issue where on the first build
`AutovalidateMode.always` was not called.

## 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
2024-11-19 19:11:00 +00:00
Taha Tesser
56cfef73fc
Introduce new Material 3 Slider shapes (#152237)
fixes [Update `Slider` for Material 3
redesign](https://github.com/flutter/flutter/issues/141842)
previous implementation https://github.com/flutter/flutter/pull/147783

### Description

This PR introduces new Material 3 Slider design. 

### Slider Preview

<img width="912" alt="Screenshot 2024-07-24 at 16 38 11"
src="https://github.com/user-attachments/assets/9645ff6c-b72a-40aa-ae95-4f76994f8302">

<img width="912" alt="Screenshot 2024-07-24 at 16 38 24"
src="https://github.com/user-attachments/assets/fbaed8bb-2717-43a9-9415-ea1365165d9a">

### Value indicator Preview



https://github.com/user-attachments/assets/45fa001c-de81-433a-a8e9-6c0d6a2335c0

### New stop indicator



https://github.com/user-attachments/assets/ad05621d-042d-4b17-9dbb-7f7b802a2593


### Customized 

<img width="912" alt="Screenshot 2024-07-24 at 16 41 49"
src="https://github.com/user-attachments/assets/2f279240-5af8-4bc8-9c65-a4b4ac718101">



## 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
2024-11-19 19:10:44 +00:00
Matan Lurey
8536b96ebb
Terminate flutter test when no longer needed in integration test. (#159117)
Towards https://github.com/flutter/flutter/issues/51421.

```sh
flutter_tools % dart test test/integration.shard/break_on_framework_exceptions_test.dart

02:38 +29: All tests passed!

54692 ttys003    0:00.02 /opt/homebrew/bin/zsh -il
```

Requires https://github.com/flutter/flutter/pull/159115 for the process
cleanup to work properly, but this is safe to land as-is, otherwise we
still accumulate `flutter` processes over and over as each test case
runs which is not WAI.
2024-11-19 16:16:08 +00:00
Matan Lurey
c5379557b3
Terminate the test device if the flutter tool is signal-killed. (#159115)
Closes https://github.com/flutter/flutter/issues/20949.

Signals (such as SIGTERM or SIGKILL) end up flowing through
`exitWithHooks`, which in turn, after running hooks, call `exit().` That
means, as a result, any `try { } finally { }` guarded execution may
_not_ run, which happens to also be how `flutter_tester` instances are
cleaned up if they have not terminated.

This PR adds in-progress `flutter_tester` runs (or any platform
`flutter_platform` supports) to the shutdown hooks, guaranteeing that
the finalizers (which in turn, kill the process) are _always_ executed
as long as either the test completes, _or_ `exitWithHooks` is called.

The existing integration tests (`integration.shard/test_test.dart`)
still pass as well.
2024-11-19 16:10:32 +00:00
Bruno Leroux
043c59b075
Fix InkWell overlayColor resolution ignores selected state (#159072)
## Description

This PR fixes `InkWell` overlay colors resolution.
The `InkWell` overlay color is resolved when the `InkWell` is either
focused, hovered , and/or pressed.
This resolution happens at two places:
- first when the highlight is created.
- then on each build, using the inner function named
`getHighlightColorForType`.
This second resolution should be aware of other current states (such as
selected) as it might impact the color resolution.

For instance, several Material styles have colors resolution define
similarly to:

dc44547d0d/packages/flutter/lib/src/material/date_picker_theme.dart (L982-L1006)

## Related Issue

Fixes [InkWell overlay colors aren't applied on MaterialState.selected
state](https://github.com/flutter/flutter/issues/159063)
First step for [Date picker overlay colors aren't applied on
MaterialState.selected state](Date picker overlay colors aren't applied
on MaterialState.selected state).

## Tests

Adds 3 tests.
2024-11-19 11:33:40 +00:00
Loïc Sharma
6b6f481f19
[SwiftPM] Move where the migration checks feature flags (#159110)
Previously, the Swift Package Manager app migration would only be
registered if the feature was on.

Now, the Swift Package Manager app migration is always registered but
only runs if the SwiftPM feature is on. This change will make it easier
to introduce a separate feature flag for just the SwiftPM app migration.

This is a refactoring with no semantic change.

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

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

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

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2024-11-19 01:23:08 +00:00
Greg Spencer
e68ed3d1f1
Plumbs scrollBehavior into SelectableText so that the scrollbar may be hidden (#158887)
## Description

This adds a `scrollBehavior` attribute to `SelectableText` so that the
scrolling can be controlled more directly.

I added this specifically because it's not possible to turn off the
scrollbar on a selectable text, even if you set the scroll physics to be
`NeverScrollableScrollPhysics`. We had a UI where we needed to have a
clipped, multi-line selectable text field, but have it not be scrollable
unless it was expanded in size, and it wasn't possible to hide the
scrollbar, but still wanted it to be selectable.

## Tests
- Added a test that makes sure that the scroll behavior makes it down to
the `Scrollable` in the `EditableText`.
2024-11-18 23:59:28 +00:00
Matan Lurey
3a17b67353
Add a tag and assert some state in FlutterTestDriver tests. (#159099)
Towards https://github.com/flutter/flutter/issues/51421.

Asserts some state we would not like to be hit by in integration tests
using `Flutter*TestDriver`.

In addition, adds a tag that can be used to run all tests that currently
use this pattern:

```sh
flutter test --tags flutter-test-driver
```

This showcases processes leaking quite a bit:
<https://gist.github.com/matanlurey/190d9084d3a45bc5737b8406bc05b4cd>.
2024-11-18 23:37:05 +00:00
Nate Wilson
c25790e3db
Add @protected to public State method overrides (#157313)
I don't want to see these methods in my autofill suggestions.

<br>

![navigator
dispose](https://github.com/user-attachments/assets/5d2dc37c-abe9-44f4-ad16-4396a3aeeaf7)
2024-11-18 21:28:08 +00:00
Ben Konyi
c7d158d9f9
Fix flaky failure related to core_device_list.json not being found (#158946)
It's possible that the tool can be in the process of shutting down,
which could result in the temp directory being deleted after the
shutdown hooks run before we check if `output` exists. If this happens,
we shouldn't crash but just carry on as if no devices were found as the
tool will exit on its own.

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

---------

Co-authored-by: Andrew Kolos <andrewrkolos@gmail.com>
2024-11-18 19:52:52 +00:00
Matan Lurey
03c13af0b4
Define and use flutterBin consistently across integration.shard. (#159007)
Towards https://github.com/flutter/flutter/issues/158875.

This should be a NOP, and just reduce the amount of copy-pasted code
across tests.
2024-11-18 19:00:04 +00:00
Matan Lurey
74384004ce
No longer download android-x86-jit-release. (#159011)
Unblocks https://github.com/flutter/flutter/issues/151610.
2024-11-18 18:22:24 +00:00
Matan Lurey
ec2ab541dd
Switch flutter_build_apk_health_tests to use a subset of current tests. (#159004)
Towards https://github.com/flutter/flutter/issues/159000 as part of
debugging issues such as
https://github.com/flutter/flutter/issues/158560.

On a `bringup: true` shard, run a number of `flutter build apk` tests in
succession to try and routinely trigger timeouts and crashes, so we can
test other hypotheses on how to fix this problem (i.e. potentially
around increasing memory, changing daemon configuration, aggressively
killing processes, etc).
2024-11-15 22:54:06 +00:00
Greg Spencer
4d3bbf30c8
Make the focus node on SelectableRegion optional. (#158994)
## Description

This makes the `focusNode`  for `SelectableRegion` optional so that:
- Users of the widget are no longer required to use `SelectableRegion`
from within a `StatefulWidget`
- They aren't likely to forget to dispose of a node they didn't supply.
- Simpler to use, and the node is not used very often anyhow.

Also made the `SelectableRegion` sample actually use `SelectableRegion`.

## Tests
- Modified all the `SelectableRegion` tests to remove 3 identical lines
of boilerplate from each (except 2, which actually used their focus
nodes).
2024-11-15 22:39:41 +00:00
Martin Kustermann
01590aa27a
Refactor native asset integration into flutter tools (#158932)
Currently the `NativeAsset` target in flutter tools is responsible for
two things:

* performing the dart build (in the app as well as all transitive pub
dependencies)
* taking output (shared libraries) from this build and copying them
around

This intermingling of responsibilities leads to more complex code and
potentially unnecessary work: If the source code changed (e.g. `.c`
files change) we have to run the dart build again. But doing so may
result in the same shared libraries (e.g. adding comments to the `.c`
code). Currently we're going to copy the shared libraries despite them
having not changed, which then may cause upstream things to be dirtied
(if it's based on timestamp of files) and re-built.

Instead this PR splits this `NativeAsset` into the two orthogonal pieces

* `DartBuild` target that is responsible for the dart build
* `InstallCodeAssets` that is responsible for copying shared libraries
to the right place and producing a `native_assets.yaml`.

This decoupling is also preparation for a future where a dart build can
produce other kinds of assets (e.g. data assets) and is used in the web
build as well. (The web build would use `DartBuild` but not
`InstalCodeAssets`).
2024-11-15 21:04:42 +01:00
Martin Kustermann
1636fbd4cb
Fix code asset copying logic in native asset code (#158984)
After the dart build is done, the flutter tool has to bundle the
produced shared libraries, which it does that by copying them around.

Though the code assumed that all code assets are shared libraries to be
bundled, whereas in fact one can have code assets without any actual
code (ones that are installed on the target system already or artificial
code assets whose symbols get resolved from executable / process).

=> Using non-bundled code assets currently results in null pointer
exceptions and/or cast errors.
=> We update the copy code to only operate on code assets that have a
shared library to bundle.

We also update the copy routines by removing copy&past'ed - but slightly
different - printing code into the shared caller function.
2024-11-15 16:23:23 +01:00
Martin Kustermann
256359194e
Fix duplicate work in native assets release builds (#158980)
In release builds linking of native assets is enabled. The build step is
only a temprary step, it's output is given to the link step which then
returns all final assets (effectively a map-reduce system). Assets that
aren't sent to a specific linker could be conceptually viewed as sent to
a linker that will emit it's input as-is.

=> The code currently took output of build & link step and therefore
accumulated assets that aren't explicitly sent to a linker twice.

=> This led to performing work twice for those (e.g. copying them twice)

This PR changes this such that if linking mode is enabled, we only rely
on the output of the link phase.
That in return means many tests that mock the native asset builds need
to be updated to mock the output of the link phase.
2024-11-15 15:05:42 +01:00
Matan Lurey
eaa99f28b1
Stop generate both .kts and non-.kts gradle files for a test project. (#158965)
Closes https://github.com/flutter/flutter/issues/158962.
2024-11-15 01:38:26 +00:00
Matan Lurey
6a145094ab
Further skip native_assets_test(s) that runs flutter build apk. (#158966)
Towards https://github.com/flutter/flutter/issues/158560.

Still occurred twice in the last 24h:

https://ci.chromium.org/ui/p/flutter/builders/prod/Linux%20tool_integration_tests_6_6/42/overview
https://ci.chromium.org/ui/p/flutter/builders/prod/Linux%20tool_integration_tests_6_6/44/overview

Let's continue to debug why these are so troublesome, but not block the tree doing so.
2024-11-15 01:34:49 +00:00
Ben Konyi
d0bd283734
[ tool ] Don't throw StateError when DDS fails to start (#158744)
This started happening after moving DDS to launch from `dart
development-service` rather than `DartDevelopmentService` (see
33b402d24c2131dcf97e272ec3d59c0249762e7f) . This state error was
originally meant to be thrown when some string parsing failed, but is
currently wrapping the `DartDevelopmentServiceException`.

Fixes https://github.com/flutter/flutter/issues/158537
2024-11-14 19:43:15 -05:00
kzrnm
dca37ad17f
[gen_l10n] When localizing a message, prefer placeholder definitions defined by the current locale rather than the template locale (#153459)
- Fixes #153457
- Fixes #116716
2024-11-14 21:48:14 +00:00
August
f35cd558f8
feat: Include web 1.x.x in plugin template (#156947)
This adds support for web 1.x.x to be included in the plugin template, when creating a web plugin.

I don't have an issue referenced. Related to https://github.com/dart-lang/web/issues/316
2024-11-14 21:48:12 +00:00
Andrew Kolos
a1a7409092
hide members where possible (#158492)
I was poking around in logger.dart when I noticed a few classes have unnecessary exposed member variables. This PR reduces visibility of these in the pursuit of making these classes slightly easier to grok.

<details>

<summary> Pre-launch checklist </summary> 

</details>
2024-11-14 21:46:10 +00:00
Andrew Kolos
21144362f8
Move platform-specific log-reading implementation details from ResidentRunner/FlutterDevice to DeviceLogReader implementations (#156181)
Cleans up https://github.com/flutter/flutter/pull/155800. In summary, `ResidentRunner`/`FlutterDevice` have branching behavior around logging that depends on the type of `DeviceLogReader` on the `FlutterDevice` instance.  Let's instead move this behavior to the `DeviceLogReader` implementations.

My apologies for the large diff. Much of this is a refactor that was a bit too difficult to separate into its own commits. 

Here are the main two changes

* Replaces the mutable `connectedVmService` field on the `DeviceLogReader` class with a new method `provideVmService`. This serves largely the same purpose as the mutable field, but it allows for asynchronous code. This is where we put the logic that used to exist in `FlutterDevice.tryInitLogReader`.
* Removes the `tryInitLogReader` method from `FlutterDevice`. This method served to set the `appPid` field on the `FlutterDevice`'s `DeviceLogReader` instance. This was only used in the case of Android to filter out logs unrelated to the flutter app coming from the device, so we can move this logic to `AdbLogReader`'s implementation of `provideVmService`.
2024-11-14 21:29:30 +00:00
Neutrino2711
4b818b56c2
Updated document to clarify Clip Behaviour (#157719)
Revised comments to clarify that clipping of child depends on clipBehavior of the parent widget, typically scrollable widgets that default to Clips.hard.
Noted that decoration features such as shadows , which render outside the widget boundary, may lead to undesirable effects.
Recommended using Clips.none in scenarios where shadow effects are used to avoid clipping issues.
Fixing Issue #156819
2024-11-14 20:21:09 +00:00
Ben Konyi
e40306f92f
Enable --verbose for android_plugin_skip_unsupported_test tests (#158933)
Hoping this will give some more insights into https://github.com/flutter/flutter/issues/157640
2024-11-14 18:35:16 +00:00
Camille Simon
46a41585eb
Add dev_dependency attribute to plugins in .flutter-plugins-dependencies (#158009)
Adds whether or not the plugins in `.flutter-plugins-dependencies` are dev dependencies or not (as the `dev_dependency` attribute).

Fixes https://github.com/flutter/flutter/issues/157948.
2024-11-14 18:08:09 +00:00
Matan Lurey
752ac20f87
No longer pass --verbose to implicit pub calls when flutter --verbose is set. (#158898)
Closes https://github.com/flutter/flutter/issues/158896.
2024-11-14 08:59:49 -08:00
Bruno Leroux
39dad9946d
Add one MenuAnchor alignment test (#158915)
This PR adds a `MenuAnchor` test to check that `MenuAnchor.alignmentOffset` is correctly applied when `MenuAnchor.layerlink` is provided.
While reviewing https://github.com/flutter/flutter/pull/158255, I found that this new test would be useful.
2024-11-14 09:52:18 +00:00
Matan Lurey
125b4e945e
Move explicit package dependencies to a feature flag (#158016)
Closes https://github.com/flutter/flutter/issues/158012.

This is (effectively) a user-facing NOP, which is exchanging an
on-by-default command-line argument (`--implicit-pubspec-resolution`)
for an off-by-default global feature flag
(`explicit-package-dependencies`). It matches the mental model better,
is less painstaking to maintain and feed throughout, and will be easier
to globally flip on/off in a future PR.

---------

Co-authored-by: Andrew Kolos <andrewrkolos@gmail.com>
2024-11-13 18:33:34 -08:00
Matan Lurey
9ac9049d09
Try with bringup: true debugging why flutter build apk often times out. (#158895)
It would be nice to have somewhere to iterate and experiment with what we can do to either fix frequent timeout problems we have with `flutter build apk` (across platforms, to be clear, though I've just started with Linux) or get more information on why the crashes/timeouts happen.

Open to other ways to doing this (though preferably _not_ LED).
2024-11-14 02:12:14 +00:00
Rexios
cc6ee0cc32
Add constraint options to SearchAnchor suggestions builder (#148856)
Refactors the `SearchAnchor` suggestions builder to not take up the whole screen

https://github.com/flutter/flutter/issues/148852
2024-11-14 01:19:09 +00:00
Mairramer
dec763979c
Adjusts the Hindi TimeOfDayFormat to display in a LTR orientation in localizations. (#157998)
Fixes https://github.com/flutter/flutter/issues/156565
This update corrects the `TimeOfDayFormat` mapping for the Hindi language. Previously, the format was incorrectly set to `a_space_h_colon_mm` - (a h:mm), but it should be `h_colon_mm_space_a` - (h:mm a) since Hindi is a LTR language.
2024-11-14 00:10:14 +00:00
hgraceb
5f0f18d739
Fix update order of SliverAppBar (#158159)
Fixes #158158

Similar to 154484, but addressing more fundamental causes. We should call the child's `didUpdateWidget` before the child's `build` when states change.

1. Remove redundant code but keep the old test because we don't need it after this fix.
2. Add getters of `lastShrinkOffset` and `lastOverlapsContent` that are needed when `SliverAppBar.update`.
3. Add a test with a custom TabBar to avoid breaking when some changes to the default TabBar.
2024-11-14 00:08:22 +00:00
Srivats Venkataraman
1a31e396db
#154792 - CupertinoActionSheetAction cursor doesn't change to clickable on desktop (#158470)
This PR is for issue #154792 
The Video recording shows the before and after
The first button with the text "Go" uses the default cursor
The second button with the text "With Cursor" uses a custom cursor that has been passed in the parameters
https://github.com/user-attachments/assets/e82ecd42-42b1-42c9-aa30-a6f3daddb436

Here is the code for the second button
```dart
CupertinoButton(
    onPressed: () {
        showCupertinoModalPopup<void>(
            context: context,
            builder: (BuildContext context) {
                return CupertinoActionSheet(
                    title: const Text('The title'),
                    message: const Text('Message'),
                    actions: <Widget>[
                        CupertinoActionSheetAction(
                            cursor: SystemMouseCursors.forbidden,
                            child: const Text('One'),
                            onPressed: () {},
                        ),
                    ],
                );
            },
        );
    },
    child: const Text('With Cursor'),
),
```

Fixes https://github.com/flutter/flutter/issues/154792
2024-11-13 23:34:08 +00:00
Mitchell Goodwin
5f93a7f7ea
Adds a skip message for analyzer (#158890)
#158880 causes the linux analyzer to complain for not having a skip
message.
2024-11-13 14:38:56 -08:00
Loïc Sharma
8a55c941cf
[SwiftPM] Move the logic for SwiftPM enablement to the platform project (#158213)
In the future, it will be possible for Swift Package Manager to be enabled on one but not all platforms (see https://github.com/flutter/flutter/issues/151567#issuecomment-2455941279).

This moves the `usesSwiftPackageManager` property from the platform-agnostic `Project` to the platform-specific `IosProject` and `MacOSProject`.

This will allow the `IosProject` and `MacOSProject` to return different values for `usesSwiftPackageManager` in the future. For now, both of these projects will always return the same value.

Part of https://github.com/flutter/flutter/issues/151567
2024-11-13 21:45:07 +00:00
Matan Lurey
5a9c2b4dd1
Temporarily skip flutter build apk for native_assets tests. (#158880)
Work around for https://github.com/flutter/flutter/issues/158560.
2024-11-13 20:57:13 +00:00
Alejandro Santiago
d7e1f03ee0
docs: include Human Interface haptic information in HapticFeedback (#158587)
## Description

Adding reference to the Human Interface documentation about Haptics in the `HapticFeedback` docs. 

The Human Haptic Guidelines documentation are excellent since they provide visualizations that show how these different haptics actually are with some interactive demos, for example with Impact haptics (see image below). Such helps developers decide what haptic to go for and understand when they should be used.

<img width="675" alt="Screenshot 2024-11-13 at 15 13 10" src="https://github.com/user-attachments/assets/909240d3-1981-4e25-9bed-b3b52154e662">
2024-11-13 20:37:22 +00:00
Matan Lurey
7374452eca
Stream the output of flutter build for debugging. (#158757)
Towards https://github.com/flutter/flutter/issues/158560.
2024-11-13 18:55:47 +00:00