* Generate projects using the new Android embedding
* Add comment about usesNewEmbedding:true
* Feedback
* Rework way to detect new embedding in new apps
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)
* dont update last compiled time when compilation is rejected
* lets try flushing, thats a neat trick
* windows man
* Update hot_reload_test.dart
* Update hot_reload_test.dart
* Update devfs.dart
* Update hot_reload_test.dart
* Update hot_reload_test.dart
* add test that verifies when compile is good that time is updated
* Update devfs_test.dart
Adds an ActivateAction to controls that use InkWell. Make InkWell host the Focus for those controls, and add the top level binding to the ENTER key. This will make it possible to trigger a button using the enter key, and to get an ink response when the button is triggered.
This is a breaking change because it moves the Focus widget into the InkWell. If you have a component that uses the InkWell directly and you used to wrap that InkWell in a Focus widget to give it its notion of focus, it will now not look for that Focus ancestor for its focus state anymore. In order to control focus on the InkWell, you need to give it a FocusNode directly, via the new focusNode parameter. This should not affect users of widgets like OutlineButton or FloatingActionButton and the like, since those have been modified in this PR.
* Updates to slider_test.dart
Fixed error that required onChanged.
* Updated slider.dart and slider_test.dart debugFillProperties
Updated slider.dart debugFillProperties to include all properties and slider_test debugFillProperties to test all properties
* Updated Slider onChanged property
* Updated debugFillProperties to ignore testing methods that are null in test
Per feedback from Hans/Anthony on Flutter Material
* Updated spacing in debugFillProperties
Per feedback from Hans
* Updated range_slider.dart and range_slider_test.dart to have DiagnosticProperties tests for all properties
* Updated range_slider.dart and range_slider_test.dart per feedback
Preventing null labels from creating an error.
Added made RangeLabels and RangeValues constants in instantiation of Range Slider.
Fixed spacing.
* Updates to start and end labels in diagnostic property tests
Updated per feedback from @clocksmith
* Stop using build_runner for dart2js
* fixes to yield when computing hashes and to imports
* add missing await
* Update filecache_test.dart
* Fix paths in filecache test
* use file uri for import
* add test cases and configurable override
* remove test dep
* fix filepaths for windows
* test no longer failing
* fix paths for test cases
* fix typo
* address comments
* make a constant
* make filehash async and use constant
* fix silly logic error
Spawn no more than 1 iframe in web tests. Using multiple iframes in DDK mode times out tests. Also set concurrency to 1 to guarantee that the test runner does not even attempt to parallelize tests.
Currently Linux builds override the default BUILD mode by putting it in
the generated config. That makes it sticky for manual runs of make,
which is inconsistent with how other platforms work.
Instead, pass the build mode as a command-line override, the same way
someone would if building directly with make. This makes the flow of
controlling the mode less confusing.
Fixes#41528
* Fix visbility of web server device when Chrome is not available
* Add tests
* Update workflow test
* Fix tests to not rely on Chrome being on the underlying machine
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.
ReorderableListView was constructing a GlobalObjectKey using
the child key as the value. This only had the intended behavior
if the child key was identical across build method invocations.
The new strategy is to scope the child key's value to the
State object's identity, allowing child keys to have value
compare semantics while disambiguating among different list view
instances.
This changes the way ActionDispatchers are found by the Actions widget, so that by default it will look for dispatchers of the parent Actions widgets instead of just creating a default ActionDispatcher. This allows overriding of the ActionDispatcher at the top level: before, the custom action dispatcher would only be invoked if explicitly set on all the Actions widgets.
This is not a breaking change because there was a default value to the dispatcher parameter before that performed this function, and not specifying the dispatcher anywhere will still result in a default dispatcher being created.
The proposed change will change focus handling when pushing and popping routes so that the FocusScopeNode for the route receives focus when pushed, and that the FocusScopeNode in the navigator receives focus when the route is popped.
This means that the last setFirstFocus call on the scope is used to determine which control actually receives focus. When the focus scope receives focus, it traverses its children, trying to find a non-scope node that is the "first focus" of itself or a child node.
This is a breaking change, because the focus behavior has changed. If you push a route after this change, and had a 'first focus' set on a widget via FocusScopeNode.setFirstFocus, it won't currently receive focus immediately, but after this change it will. Similarly, if you pop a route after this change, the focus will go back to where it was before the route was pushed, which is correct, but different from what happens now.
Adds very preliminary support for Windows and Linux plugins:
- Adds those platforms to the new plugin schema, initially supporting just a plugin class.
- Adds C++ plugin registrant generation for any Windows or Linux plugins found.
This doesn't have yet have any build tooling for either platform, so anyone using the generated registrant still needs to do manual build configuration. This reduces the manual work, however, and creates a starting point for future tooling work.
As with all Windows and Linux work at this time, this is not final, and subject to change without warning in the future (e.g., Windows could potentially switch to a C# interface, or
'linux' may change to 'gtk' or 'linux_gtk' in pubspec.yaml).
* MouseRegion documentation claimed that onEnter and onExit
would track entry and exit regardless of whether the pointer was
down or up
* It did such, but when grabbing the value of `event.down` from
the passed event, the value was always `false`
* PointerEnterEvent and PointerExitEvent were overriding the value
passed from PointerEvent in constructors, even if the value was true
e.g. in invocations of .fromMouseEvent((PointerMoveEvent...))
* This change now passes the value along to PointerEnter/ExitEvents
while providing it a default of false, and updates documentation
Fixes#40637
This fixes the mouse hover code to not schedule frames with every mouse move.
Before this, it would schedule a post frame callback, and then schedule a frame immediately, even if there was nothing that needed to be updated. Now it will schedule checks for mouse position updates synchronously, unless there's a new annotation, and skip scheduling a new frame in all cases. It has to be async in the case of a new annotation (i.e. a new MouseRegion is added), since when the annotation is added, it hasn't yet painted, and it can't hit test against the new layer until after the paint, so in that case it schedules a post frame callback, but since it's already building a frame when it does that, it doesn't need to schedule a frame.
The code also used to do mouse position checks for all mice if only one mouse changed position. I fixed this part too, so that it will only check position for the mouse that changed.
* Carrying last size and transform information to TextInputConnection. Doing this we are making sure that the size/transform information from the previous connection will be removed, when connection changes.
* remove unused lastsize and lasttransform values
* Adding unit tests. Adressing comments.
There were four or five different implementations in various tests for sendFakeKeyEvent, which roughly all did the same thing. I was going to add yet another one, and decided that it needed to be generalized and centralized. This replaces those instances with something that just takes a LogicalKeyboardKey so that it's self-documenting, and can be used with multiple platforms.
This adds two functions to widget tester: sendKeyDownEvent and sendKeyUpEvent which simulate key up/down from a physical keyboard. It also adds global functions simulateKeyDownEvent and simulateKeyUpEvent that can be called without a widget tester. All are async functions protected by the async guard.
This reverts commit b12bdd0ea1 as it
breaks existing tests that expect image loaded after certaing number of
pupms. With image loading done on separate isolate pumping is not
guaranteed to get image loaded.
Adds macOS support for `flutter create`:
- Currently it is behind a hidden flag.
- Adds a TargetPlatform workaround to lib/main.dart in the standard app template when enabled.
- Supports `app` and `plugin`; `module` support doesn't yet exist for macOS in general.
This will eliminate the need to use FDE's examples as templates on macOS. The templates are based on the current state of FDE's examples, with templating support added (and with adoption of the new application delegate in the app, which hadn't been done yet in FDE, eliminating some boilerplate from the template).
Fixes#30703
* Allow sending messages from the platform to the framework
* Add ability to send messages from the plugin to the platform.
Also adds [PluginEventChannel] which is the plugin counterpart to
EventChannel.
Fixes https://github.com/flutter/flutter/issues/39981
* fix analyzer errors
* Enhance doc comments
* Remove dead code in test
Before this change, having an Android app depend on a plugin that has no android implementation resulted in a Gradle build failure.
This scenario is likely to become more common if we're enabling federated plugins, as the package implementing just the desktop implementation of a plugin won't have an Android implementation.
This changes the Gradle plugin to not try to build any plugins that doesn't have an android/build.gradle file.
Previously, focus nodes created in the tab scaffold were not being disposed of properly, causing possible memory leaks. Also, the builder wasn't being passed the right context so that the FocusScope.of operator inside of a builder would find the focus scope for the given tab (it was being passed the context of the overall tab scaffold).
This updates the keyboard maps to use updated HID codes for game controller buttons (from Chrome), and to encode that GLFW "super" keys are what we call "meta" keys (i.e. Windows key or Command key).
* Fixing LocalFileComparator output
* Fixing path separators for windows failures
* Windows path issues
* Testing
* ++
* ++
* Fixing base directory - windows
* Clean up
On macOS and iOS, the build mode is converted to lowercase in the
Flutter-side script, allowing projects to pass configuration names
directly. This adds the same behavior to the tool_backend.dart script
currently used by Windows and Linux, so that Windows builds can do the
same (since the default configuration names used by VS, as in Xcode,
start with a capital letter).
- Makes build_macos.dart handle the case where there is only one Xcode
project in the macos/ directory, but it's not called Runner.xcodeproj
- Makes getInfo throw a tool exit when trying to get project info and it
can't find a project, since that is a configuration error by the user
rather than a tool bug.