* Use explicit types for onClick handler in diagnostics_test.
This test formats it to string and expects exact match.
Before this change onClick had type () => dynamic in Dart 1 and () => Null in
Dart 2.
* Fix strong mode issues in packages/flutter/test/material/dropdown_test.dart
Pass explicit type argument to renderObjectList(...) in expressions like
List<RenderBox> l = tester.renderObjectList(...).toList();
Dart 2 mode inference is not strong enough to infer RenderBox as a type argument
fto renderObjectList and passes RenderObject instead, which later leads to
runtime check failures (because List<RenderObject> is not List<RenderBox>).
* Fix strong mode issues in packages/flutter/test/material/theme_test.dart.
Pass type argument explicity to widgetList. Dart 2 type inference can't infer
it by itself.
* Fix strong mode issue packages/flutter/test/widgets/unique_widget_test.dart
Pass correct type argument to GlobalKey.
* Fix type annotation in packages/flutter/test/material/app_test.dart.
pushNamed returns Future<Object> not Future<String>.
This adds an API for defining the semantic node traversal order.
It adds a sortOrder argument to the Semantics widget, which is a class that can define a list of sort keys to sort on. The keys are sorted globally so that an order that doesn't have to do with the current widget hierarchy may be defined.
It also adds a shortcut sortKey argument to the Semantics widget that simply sets the sortOrder to just contain that key.
The platform side (flutter/engine#4540) gets an additional member in the SemanticsData object that is an integer describing where in the overall order each semantics node belongs. There is an associated engine-side change that takes this integer and uses it to order widgets for the platform's accessibility services.
* Unpin package:test and upgrade packages
* Update packages/flutter/test/foundation/stack_trace_test.dart
* Also add packages/flutter_tools/test/data/asset_test/font/.dartignore to ensure that update-packages --force-upgrade does not crash.
Seems like we don't yet run the flutter tests on Windows, but we're
close to being able to. This makes some minor changes to make that
more possible:
- fix the stack parsing code to support Windows paths
- fix the tests for the stack error handling code to handle Windows paths
- skip some tests that rely on Ahem font metrics
This allows the scheduler library to depend on the services library
and the painting library to depend on the scheduler library without
the services library having to depend on the scheduler library.
While I was at it I also cleaned up some of the binding logic: the
licenses logic can now be overridden (and the test library does so),
and the image cache can now be overridden as well.
Bare bones widget inspector support.
Toggle the widget inspector from the flutter tool by pressing 'i'.
When the widget inspector is select mode:
Pointer down to to inspect a widget.
Pointer click to finalize selection of a widget. You can now interact
with the application as you normally would but with the inspected widget
highlighted.
Click the inspect icon in bottom left corner of screen to reactivate
select mode.
It was previously possible for event dispatch to occurr during the
brief window where the tree had been marked dirty but before it had
been relaid out by reassemble, which would cause assertions to fire if
someone did a hot reload while touching the device.
* fire service protocol extension events for frames
* start time in micros
* introduce a profile() function; only send frame events when in profile (or debug) modes
* moved the profile() function to foundation/profile.dart
* refactor to make the change more testable; test the change
* fire service protocol events by listening to onFrameInfo
* remove the frame event stream; add a devicelab test
* remove a todo
* final
It was 8.0. It's now arbitrarily 18.0.
Changing this required adjusting some tests. Adjusting the tests
required debugging the tests. Debugging the tests required some tools
to help debugging gesture recognizers and gesture arenas, so I added
some. It also required updating some toString() methods which resulted
in some changes to the tree diagnostics logic.
Also I cleaned up some docs while I was at it.
* Revert "Revert "Change all ocurrences of '$runtimeType#$hashCode' to use the idAndType method. (#10871)" (#10880)"
This reverts commit ceb814aa647ecd310794a72a7a5c28820ec57a25.
* Change all instances of '$runtimeType#$hashCode' to use the describeIdentity method.
The describeIdentity method generates a shorter description with a consistent length
consisting of the runtime type and the a 5 hex character long truncated
version of the hash code.
* Add more tests of toStringDeep.
These tests will help ensure toStringDeep behavior is not regressed
by refactoring toStringDeep to support structured data.
This splits the frame pipeline into two, beginFrame and drawFrame.
As part of making this change I added some debugging hooks that helped
debug the issues that came up:
* I added debugPrintScheduleFrameStacks which prints a stack whenever
a frame is actually scheduled, so you can see why frames are being
scheduled.
* I added some toString output to EditableText and RawKeyboardListener.
* I added a scheduler_tester.dart library for scheduler library tests.
* I changed the test framework to flush microtasks before pumping.
* Some asserts that had the old string literal form were replaced by
asserts with messages.
I also fixed a few subtle bugs that this uncovered:
* setState() now calls `ensureVisualUpdate`, rather than
`scheduleFrame`. This means that calling it from an
AnimationController callback does not actually schedule an extra
redundant frame as it used to.
* I corrected some documentation.
We now have an explicit focus tree that we manage. Instead of using
GlobalKeys to manage focus, we use FocusNode and FocusScopeNode objects.
The FocusNode is Listenable and notifies when its focus state changes.
Focus notifications trigger by tree mutations are now delayed by one
frame, which is necessary to handle certain complex tree mutations. In
the common case of focus changes being triggered by user input, the
focus notificiation still arives in the same frame.