Also:
* Add three explicit sizing modes to Stack for non-positioned
children: loose, expand, and passthrough. (All three are used.)
* Fix a bug whereby layers would try to paint in the same frame as
they were removed from layout (but not detached).
* Fix a bug whereby Offstage wasn't properly marking the parent dirty
when changing its sizedByParent flag.
* Explicitly make Overlay expand non-positioned children.
* Explicitly have InputDecoration pass through the constraints from
its Row to its Stack children.
This patch reworks some of the guts of scrolling to make it easier to
implement nested scrolling effects. The actually nested scrolling effect
will be included in a later patch.
This patch introduces the notion of a keyboard token, which generalizes the
logic in EditableText for distinguishing between gaining focus by default and
gaining focus because of an explicit use action.
Fixes#7985
Move the Drag*Details classes into drag_details.dart.
Move the one-gesture drag recognizers into monodrag.dart.
Move Drag into drag.dart.
Adjust the comments to claim that Drag is used by other things than
MultiDragGestureRecognizer. (Right now this is a lie but it will
hopefully be true soon.)
* Make Cupertino page transition elevation animated too
* Rename and change physical model to a decorated box
* Tests
* Add a comment
* still need to handle null in the tween somewhere
* nits
* Tweens evaluate to the actual begin/end instances. Let them be non-null
* Rename no decoration to none
With this patch, you can do:
```dart
Future<Null> foo() async {
try {
await controller.forward().orCancel;
await controller.reverse().orCancel;
await controller.forward().orCancel;
} on TickerCanceled {
// did not complete
}
}
```
...in a State's async method, and so long as you dispose of the
controller properly in your dispose, you'll have a nice way of doing
animations in sequence without leaking the controller. try/finally
works as well, if you need to allocate resources and discard them when
canceled.
Simultaneously, you can do:
```dart
Future<Null> foo() async {
await controller.forward().orCancel;
await controller.reverse().orCancel;
await controller.forward().orCancel;
}
```
...and have the same effect, where the method will just silently hang
(and get GC'ed) if the widget is disposed, without leaking anything,
if you don't need to catch the controller being killed.
And all this, without spurious errors for uncaught exceptions on
controllers.
I can't figure out if this is genius or a giant hack.
This lets you use DefaultTextStyle.merge and IconTheme.merge without
specifying a BuildContext. It automatically merges in at the
appropriate place in the tree using a Builder widget.