Kate Lovett
9d96df2364
Modernize framework lints ( #179089 )
...
WIP
Commits separated as follows:
- Update lints in analysis_options files
- Run `dart fix --apply`
- Clean up leftover analysis issues
- Run `dart format .` in the right places.
Local analysis and testing passes. Checking CI now.
Part of https://github.com/flutter/flutter/issues/178827
- Adoption of flutter_lints in examples/api coming in a separate change
(cc @loic-sharma)
## 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].
**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code ).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.
<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-11-26 01:10:39 +00:00
Tong Mu
8040ebc803
Correctly implement PlatformViews' cursors on Web ( #174300 )
...
Fix https://github.com/flutter/flutter/issues/174246
Before:
https://github.com/user-attachments/assets/33d2a476-d9c4-46e1-a5c5-ea8e602060d6
After:
https://github.com/user-attachments/assets/383e4a01-4b8e-4c0e-a5a4-fa0d1fc28b67
This PR is not a result of a thorough fix for mouse cursors on all
platforms, but simply matching the behavior of `SelectionArea` on Web to
that on non-Web.
A central question lies how a platform view widget should control the
mouse cursor. On the surface, the answer is simple: it doesn't, and let
the view content to control (hence the `MouseCursor.uncontrolled`
constant). But what if the empty region of the view content doesn't
control the cursor at all? This would be a problem even on non-Web,
because if neither the view content nor the view controls the cursor on
non-Web, then the user will find the cursor remaining the one used by
the last region, which would be different when entering and when
leaving, the same bug as
https://github.com/flutter/flutter/issues/174246 . On the other hand,
what is it supposed to fall back to if the view content doesn't define a
cursor? Is the default cursor the logically correct option? ...
I decided that I did not want to dig too much into the details, and
instead focus on this specific issue. I tried the repro app on macOS and
found that the empty region of `SelectionArea` falls back to the widget
behind it, the same behavior as `MouseCursor.defer`. Therefore in this
PR I made `MouseCursor.uncontrolled` essentially the same as `.defer` on
Web, matching the behavior across platforms.
## 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].
**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code ).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.
<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2025-09-21 03:52:34 +00:00
Kostia Sokolovskyi
1b9502b007
Add debugOverridePlatformViewRegistry to HtmlElementView test. ( #170163 )
...
### Description
- Adds `debugOverridePlatformViewRegistry` usage to `HtmlElementView`
tests
- Removes private `debugOverridePlatformViewRegistry` from
`_html_element_view_web.dart`
## 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
2025-06-09 15:01:53 +00:00
Mouad Debbar
996badc9cf
[web] Only create one <style> for SelectableRegion ( #161682 )
...
We used to create and insert a new `<style>` element for each
`SelectableRegion` widget. That's unnecessary. All we need is one
`<style>` element that contains the style sheets that we want to apply.
Most of this PR is re-working the tests to be able to check that the
issue is actually fixed.
Fixes https://github.com/flutter/flutter/issues/161519
2025-02-05 20:51:29 +00:00
Michael Goderbauer
5491c8c146
Auto-format Framework ( #160545 )
...
This auto-formats all *.dart files in the repository outside of the
`engine` subdirectory and enforces that these files stay formatted with
a presubmit check.
**Reviewers:** Please carefully review all the commits except for the
one titled "formatted". The "formatted" commit was auto-generated by
running `dev/tools/format.sh -a -f`. The other commits were hand-crafted
to prepare the repo for the formatting change. I recommend reviewing the
commits one-by-one via the "Commits" tab and avoiding Github's "Files
changed" tab as it will likely slow down your browser because of the
size of this PR.
---------
Co-authored-by: Kate Lovett <katelovett@google.com>
Co-authored-by: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com>
2024-12-19 20:06:21 +00:00
Mouad Debbar
e9fb545c05
[web] Allow control of hitTestBehavior of Platform Views ( #157189 )
...
Hit testing behavior is currently hardcoded to `opaque` in `HtmlElementView` which causes the platform view to swallow pointer events when it's a descendant of a `GestureDetector` (see this [example](https://dartpad.dev/?id=5348fbf82be5eeb7d995f953437f0ce6 )).
In order to fix this, we need to make `hitTestBehavior` configurable in `HtmlElementView`. This way users can decide to make their platform views `transparent` for hit testing purposes.
**_Note_**: this specific case isn't fixable by `PointerInterceptor` because the framework is already receiving the pointer events, so there's nothing that `PointerInterceptor` can do. This issue is all happening on the framework side since it treats the rectangle occupied by the platform view as an opaque rectangle for hit testing.
**_Workaround_**: in the meantime, users can work around this limitation by surrounding the `HtmlElementView` with an `IgnorePointer` widget.
2024-10-22 17:53:17 +00:00
Nate
17a27358a6
Implementing switch expressions in flutter/test/ ( #144580 )
...
Migrates test code to new `switch` syntax.
2024-03-14 14:20:44 -07:00
Anis Alibegić
81d80c587d
Fixed a lot of typos ( #141431 )
...
Fair amount of typos spotted and fixed. Some of them are in comments, some of them are in code and some of them are in nondart files.
There is no need for issues since it's a typo fix.
I have doubts about [packages/flutter_tools/lib/src/ios/core_devices.dart](https://github.com/flutter/flutter/compare/master...anisalibegic:flutter:master#diff-fdbc1496b4bbe7e2b445a567fd385677af861c0093774e3d8cc460fdd5b794fa ), I have a feeling it might broke some things on the other end, even though it's a typo.
2024-01-12 22:10:25 +00:00
Polina Cherkasova
baf739c8e6
Remove usage of testWidgetsWithLeakTracking. ( #140239 )
2023-12-15 14:13:31 -08:00
Kostia Sokolovskyi
95eae5f967
Cover more test/widgets tests with leak tracking #12 . ( #135385 )
2023-09-29 17:47:04 -07:00
Mouad Debbar
55fe41be59
[web] New HtmlElementView.fromTagName constructor ( #130513 )
...
This wraps up the platform view improvements discussed in https://github.com/flutter/flutter/issues/127030 .
- Splits `HtmlElementView` into 2 files that are conditionally imported.
- The non-web version can be instantiated but it throws if it ends up being built in a widget tree.
- Out-of-the-box view factories that create visible & invisible DOM elements given a `tagName` parameter.
- New `HtmlElementView.fromTagName()` constructor that uses the default factories to create DOM elements.
- Tests covering the new API.
Depends on https://github.com/flutter/engine/pull/43828
Fixes https://github.com/flutter/flutter/issues/127030
2023-08-07 23:45:19 +00:00
Mouad Debbar
b0188cd182
[web] Pass creation params to the platform view factory ( #128146 )
...
This concludes step 1 of the `HtmlElementView` improvements. It's now possible to pass creation params to platform view factories directly from `HtmlElementView`.
Here's a sample app using a single factory to render platform views in different colors:
<details>
<summary>Code sample</summary>
```dart
import 'dart:js_interop';
import 'dart:ui_web' as ui_web;
import 'package:flutter/material.dart';
import 'package:web/web.dart' as web;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Platform View Demo',
home: Scaffold(
appBar: AppBar(
title: Text('Platform View Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
BoxWrapper('red'),
BoxWrapper(null),
BoxWrapper('blue'),
],
),
),
),
);
}
}
bool isRegistered = false;
class BoxWrapper extends StatelessWidget {
const BoxWrapper(this.cssColor);
final String? cssColor;
void register() {
if (isRegistered) return;
isRegistered = true;
ui_web.platformViewRegistry.registerViewFactory('my-platform-view', (
id, {
Object? params,
}) {
params as String?;
final element = web.document.createElement('div'.toJS) as web.HTMLElement;
element.textContent = 'Platform View'.toJS;
element.style
..lineHeight = '100px'.toJS
..fontSize = '24px'.toJS
..backgroundColor = (params ?? 'pink').toJS
..textAlign = 'center'.toJS;
return element;
});
}
@override
Widget build(BuildContext context) {
register();
return SizedBox(
width: 200,
height: 100,
child: Card(
child: HtmlElementView(
viewType: 'my-platform-view',
creationParams: cssColor,
),
),
);
}
}
```
</details>

Depends on https://github.com/flutter/engine/pull/42255
Part of https://github.com/flutter/flutter/issues/127030
2023-06-15 18:00:25 +00:00
Michael Goderbauer
b308555ed1
Enable dangling_library_doc_comments and library_annotations lints ( #117365 )
2022-12-20 16:03:21 -08:00
Arthas
376584289c
Add onPlatformViewCreated to HtmlElementView ( #84095 )
2021-07-20 14:29:04 -07:00
Michael Goderbauer
ed755fba5e
Enable avoid_unnecessary_containers lint ( #77294 )
2021-03-04 15:29:03 -08:00
Jonah Williams
cfb63356c3
[flutter_tools] use frontend_server for web test compilation ( #70714 )
2020-11-18 14:55:26 -08:00
Darren Austin
f7ee440207
Migrate yet even more widget framework tests to null safety. ( #67941 )
...
Migrate yet even more widget framework tests to null safety.
2020-10-15 11:12:02 -07:00
Alexandre Ardhuin
4d7525f05c
Opt out nnbd in packages/flutter ( #59186 )
...
* add language version 2.8 in packages/flutter
* enable non-nullable analyzer flag
2020-06-11 14:11:30 +02:00
Ian Hickson
449f4a6673
License update ( #45373 )
...
* Update project.pbxproj files to say Flutter rather than Chromium
Also, the templates now have an empty organization so that we don't cause people to give their apps a Flutter copyright.
* Update the copyright notice checker to require a standard notice on all files
* Update copyrights on Dart files. (This was a mechanical commit.)
* Fix weird license headers on Dart files that deviate from our conventions; relicense Shrine.
Some were already marked "The Flutter Authors", not clear why. Their
dates have been normalized. Some were missing the blank line after the
license. Some were randomly different in trivial ways for no apparent
reason (e.g. missing the trailing period).
* Clean up the copyrights in non-Dart files. (Manual edits.)
Also, make sure templates don't have copyrights.
* Fix some more ORGANIZATIONNAMEs
2019-11-27 15:04:02 -08:00
Yegor
86f069f1c0
Add most of the widget tests; add more web test shards ( #42807 )
2019-10-16 09:18:44 -07:00
Harry Terkelsen
13bd52bf9e
Add HtmlElementView (the Flutter Web platform view) ( #37819 )
...
* Implement HtmlView, the platform view widget for Flutter Web
* Document HtmlView constructor
* Respond to review comments
* - Rename to HtmlElementView
- Assert running on web
- Move test to Chrome-only file
2019-08-29 12:49:04 -07:00