Commit Graph

31 Commits

Author SHA1 Message Date
Michael Goderbauer
ca2d60e8e2
Prepare more of dev for use_super_parameters (#101073) 2022-03-30 14:05:05 -07:00
Abhishek Ghaskata
a8e2606963
Migrate manual_tests to null safety (#82611) 2021-05-27 10:49:02 -07:00
Alexandre Ardhuin
157bc92d4a
end of sort_child_properties_last (#82457) 2021-05-13 13:39:04 -07:00
Michael Goderbauer
b8a2456737
Enable library_private_types_in_public_api lint (#81578) 2021-05-10 16:26:16 -07:00
Tong Mu
b8833afcc9
Migrate LogicalKeySet to SingleActivator (#80756)
Applies #78522 to existing code, by replacing all occurrences of LogicalKeySet to SingleActivator or ShortcutActivator.
2021-04-26 14:54:00 -07:00
Michael Goderbauer
0f568298d8
enable use_key_in_widget_constructors lint (#77032) 2021-03-02 10:14:02 -08:00
Sam Rawlins
2b63181116
Remove "unnecessary" imports. (#74385) 2021-01-25 19:09:05 -08:00
Greg Spencer
8c03ff8c1d
Mark keys that match a shortcut, but have no action defined as "not handled". (#67359)
- - When I added notification of key events before processing them as text, it made it so that shortcut key bindings like the spacebar would prevent spaces from being inserted into text fields, which is obviously not desirable (and so that change was reverted). At the same time, we do want to make it possible to override key events so that they can do things like intercept a tab key or arrow keys that change the focus.

This PR changes the behavior of the Shortcuts widget so that if it has a shortcut defined, but no action is bound to the intent, then instead of responding that the key is "handled", it responds as if nothing handled it. This allows the engine to continue to process the key as text entry.

This PR includes:

- Modification of the callback type for key handlers to return a KeyEventResult instead of a bool, so that we can return more information (i.e. the extra state of "stop propagation").
- Modification of the ActionDispatcher.invokeAction contract to require that Action.isEnabled return true before calling it. It will now assert if the action isn't enabled when invokeAction is called. This is to allow optimization of the number of calls to isEnabled, since the shortcuts widget now wants to know if the action was enabled before deciding to either handle the key or to return ignored.
- Modification to ShortcutManager.handleKeypress to return KeyEventResult.ignored for keys which don't have an enabled action associated with them.
- Adds an attribute to DoNothingAction that allows it to mark a key as not handled, even though it does have an action associated with it. This will allow disabling of a shortcut for a subtree.
2020-10-19 11:26:50 -07:00
Hans Muller
6b7634b73a
Removed old button widget references from dev/manual_tests (#62816) 2020-08-05 14:51:27 -07:00
Greg Spencer
2163731c99
Remove DiagnosticableMixin in favor of Diagnosticable (#58635) 2020-06-16 09:25:04 -07:00
Greg Spencer
36767d01e4
Make Action.enabled be isEnabled(Intent intent) instead. (#55230) 2020-04-21 13:18:04 -07:00
Greg Spencer
0f68b46f6a
Revise Action API (#42940)
This updates the Action API in accordance with the design doc for the changes: flutter.dev/go/actions-and-shortcuts-design-revision

Fixes #53276
2020-04-07 16:49:39 -07:00
Greg Spencer
1ba4f1f509
Add Linux and Windows target platforms (#51519)
This PR adds the linux and windows target platform enum values, along with automatically setting the defaultTargetPlatform to the appropriate value on those platforms.

Fixes #31366
2020-03-03 04:38:04 -08:00
Greg Spencer
d57d493507
Reland: Add OrderedFocusTraversalPolicy and FocusTraversalGrou… (#50672)
This re-lands #49235 with the addition of includeSemantics flag on the Focus widget so that the FocusTraversalGroup can create a Focus widget without affecting the semantics tree.

The FocusTraversalGroup uses the Focus widget to create a grouping of descendants for traversal, but doesn't actually participate in focus (canRequestFocus is always false), so we don't want it to add a Semantics widget in that case, since that can cause semantics changes. The canRequestFocus attribute can also be used when a widget is disabled, so we do sometimes want to include Semantics even if that is false, but not in the case where it is always false, as for FocusTraversalGroup.

- Added a test to make sure that FocusTraversalGroup doesn't add any semantics information.
2020-02-12 16:22:01 -08:00
Greg Spencer
c132c0faa9
Revert "Add OrderedFocusTraversalPolicy and FocusTraversalGrou… (#50660)
This reverts commit 8ef5e2f046 because it breaks some semantics tests.
2020-02-12 13:37:36 -08:00
Greg Spencer
8ef5e2f046
Add OrderedFocusTraversalPolicy and FocusTraversalGroup to all… (#49235)
This change adds a way to provide explicit focus order for a part of the widget tree.

It adds FocusTraversalPolicyGroup, which in many ways is similar to DefaultFocusTraversal, except that it groups a widget subtree together so that those nodes are traversed as a group. DefaultFocusTraversal doesn't work as one would expect: If there is more than one DefaultFocusTraversal inside of a focus scope, the policy can change depending on which node was asked to move "next", which can cause unexpected behavior. The new grouping mechanism doesn't have that problem. I deprecate DefaultFocusTraversal in this PR.

It also adds OrderedFocusTraversalPolicy, which is a policy that can be supplied to FocusTraversalPolicyGroup to set the policy for a sub-tree. It looks for FocusTraversalOrder inherited widgets, which use a FocusOrder to do the sorting. FocusOrder has two subclasses: NumericalFocusOrder (which sorts based on a double), and LexicalFocusOrder, which sorts based on a String.

As part of doing this, I refactored the way FocusTraversalPolicy is implemented so that it has more default implementation methods, and exposes a new protected member: sortDescendants, which makes it easier for developers to make their own policy subclasses: they only need to implement sortDescendants to get a new ordering behavior, but can also still override any of the default implementation behaviors if they need different behavior.

I was able to do this without breaking the API (AFAICT).
2020-02-11 09:18:39 -08:00
Hans Muller
bc5c46438a Migrate TextTheme to 2018 APIs (#48547) 2020-01-24 19:03:01 -08:00
Alexandre Ardhuin
4f9b6cf017
enable lint prefer_final_in_for_each (#47724) 2020-01-07 16:32:04 +01:00
Alexandre Ardhuin
ec1a015045
implicit-casts:false in dev (#45787) 2019-12-05 22:34:06 +01: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
Greg Spencer
245d1b51ce
Add macOS to TargetPlatform (#43457)
This PR adds TargetPlatform.macOS to the TargetPlatform enum. This allows us to begin implementation of some adaptive UI based on which target platform is desired.

I haven't updated the tests here, that will come in a follow-up PR.
2019-11-26 18:32:34 -08:00
Greg Spencer
29ab6b549a
Update manual_tests to be able to run on macOS/web (#44830)
I updated the build files for manual_tests, as well as adding in a macos and web directory to allow the manual tests to be run on the web or on desktop.

The main change here are the parts that I added to the files in manual_tests/lib/... (the addition of kIsWeb to "if (!kIsWeb && Platform.isMacOS) {") The rest is just an update of the auto-generated code from flutter create.
2019-11-19 11:29:35 -08:00
Greg Spencer
3a30722fda
Add convenience accessor for primaryFocus (#43859)
This adds accessors for WidgetsBinding.instance.focusManager and WidgetsBinding.instance.focusManager.primaryFocus so that they can be more easily found in IDEs and accessed.

This adds a top level getter for WidgetsBinding.instance.focusManager.primaryFocus called primaryFocus, and a static accessor FocusManager.instance that returns WidgetsBinding.instance.focusManager.
2019-10-31 18:02:31 -07:00
Greg Spencer
ce1509714c
Re-land keyboard traversal PRs (#42278)
This attempts to reland #40186 and #41220, that were reverted in #41945.

The main modifications from the original PRs are that I predefine the shortcuts and actions maps instead of defining them inline in the build function, and I use a new mapEquals to do a deep comparison so that we don't rebuild modified things if the contents of the map haven't changed.

I also eliminated an operator== and hashCode that were defined on the Actions widget, since widgets shouldn't have those. (it's too bad though: I get an 85% speedup if we leave this in! Too bad it prevents rebuilding of the children...)

Fixes #40101
2019-10-10 13:49:33 -07:00
Greg Spencer
3e2dc8ca7b Revert ActivateAction PR (#41945) 2019-10-03 20:27:37 -07:00
Greg Spencer
bedf46d06e
Add shortcuts and actions for default focus traversal (#40186)
This adds the default shortcuts and actions for keyboard-based focus traversal of apps.

This list of shortcuts includes shortcuts for TAB, SHIFT TAB, RIGHT_ARROW, LEFT_ARROW, UP_ARROW, DOWN_ARROW, and the four DPAD keys for game controllers (because the DPAD produces arrow key events).

It doesn't yet include functionality for triggering a control (e.g. SPACE, ENTER, or controller buttons), because that involves restructuring some of the Flutter controls to trigger animations differently, and so will be done in another PR (#41220)
2019-10-02 15:21:45 -07:00
Greg Spencer
0223565fd5
Reland changes to Intent.doNothing to avoid analyzer issue (#41477)
This re-lands #41417 with a slight change that will hopefully not tickle the analyzer as it did before. The last time I tried to land this, the analyzer succeeded for the analyze step in Cirrus, and locally, but failed in an integration test.
2019-09-28 08:55:47 -07:00
Greg Spencer
957d839775
Revert "Address previous comments, fix Intent.doNothing. (#41417)" (#41449)
This reverts commit eb3e2f559f because of a suspected analyzer bug.  Reverting to investigate.
2019-09-26 22:45:21 -07:00
Greg Spencer
eb3e2f559f
Address previous comments, fix Intent.doNothing. (#41417)
This addresses comments in the original PR (#41245) that introduced Intent.doNothing, adds tests, and fixes an issue with it.
2019-09-26 19:54:28 -07:00
Greg Spencer
9749f59cf5
Desktop manual tests (#41247)
This enables the manual tests to be built on a macOS desktop machine in desktop mode.

I created the macos directory by using flutter create --macos
2019-09-25 14:49:22 -07:00
Greg Spencer
387e2b0602
Add actions and keyboard shortcut map support (#33298)
This implements the keyboard shortcut handling and action invocation in order to provide a place in the infrastructure for keyboard events to trigger actions. This will allow binding of key events to actions like "move the focus to the next widget" and "activate button".
2019-06-04 11:30:24 -07:00