Transform applies its transform before painting, but sometimes you want
the widget to layout after its transform has been applied. We can't
handle general tranforms in this way because we can't couple width and
height constriants, but we can handle certain rotations.
Fixes#1214
Well, all the easy ones, anyway.
For some reason `// ignore:` isn't working for me so I've disabled
lints that need that. Also disabled those that require a ton of work
(which I'm doing, but not in this PR, to keep it reviewable).
This adds:
- avoid_init_to_null
- library_names
- package_api_docs
- package_names
- package_prefixed_library_names
- prefer_is_not_empty
- sort_constructors_first
- sort_unnamed_constructors_first
- unnecessary_getters_setters
Specifically:
* Handle null styles in TextSpan without crashing in toString().
* Handle null children in TextSpan child lists without crashing in
toString().
* Handle entirely empty TextSpans in toString() explicitly.
* Assert that TextSpans don't contain nulls in various places. This is
done more often than one might think necessary, because it turns out
that TextSpan takes a (mutable) List for one of its arguments, so
who knows what it will contain at any given time. By asserting all
over the place, hopefully we'll catch it near the change if they do
change it.
* Add a RichText example to Stocks to exercise RichText and TextSpans.
See also: https://github.com/flutter/flutter/issues/2514, https://github.com/flutter/flutter/issues/2519
This patch tweaks the definition of max intrinsic size to give implementations
more wiggle room to compute there intrinsic sizes more efficiently.
Specifically, implementations can now ignore the incomming constraint in the
cross axis if they prefer.
This patch removes an assert that is no longer valid w.r.t. the new definition
of intrinsic sizing.
Fixes#2099
This adds an assert to verify that we have already got a binding when we
get a semantics listener. Otherwise we crash. (I mean, we still crash,
but now in checked mode we crash on an assert instead. Progress?)
Also:
- add operator==/hashCode/toString to ViewportDimensions
- add toString to BindingBase
- add toString and debugFillDescription to ScrollBehavior
- fix a bug in the RawGestureDetectorState's replaceGestureRecognizers
- rename MixedViewport's onExtentsUpdate to onExtentChanged
- replace ExtentsUpdateCallback with ValueChanged<double>
- remove a microtask for dispatching scroll start, since it
did not appear to have any purpose
- added dartdocs to Instrumentation until I understood it
- made all event dispatch in Instrumentation drain microtasks
There's no reason to make clients supply a PointerRounter and a
GestureArena when constructing gesture recognizers. These objects are
statics and the gesture recognizers can just grab them directly.
Also, remove the callback constructor arguments. Almost no code used
them. Instead, people seem to prefer using the `..` operator to set
callbacks on the recognizers. Removing the arguments removes a bunch of
boilerplate.
Now we just have one TextSpan class that handles both simple strings, trees of
children, and styling both. This approach simplifies the interface for most
clients.
This patch also removes StyledText, which was weakly typed and tricky to use
correctly. The replacement is RichText, which is strongly typed and uses
TextSpan.
This patch makes it easier to use the auto layout API:
* We no longer use operator== because that requires an ugly cast by the
API user.
* Also, "leftEdge" is now just "left" for less verbosity.
* AutoLayoutChild not implies its key from the AutoLayoutParam object.
* We now correctly layout every child of a RenderAutoLayout object even
if the solver doesn't flush any updates to that child.
This patch teaches the widget framework how to use Cassowary-based
autolayout. To integrate autolayout with widgets, I had to refactor how
RenderAutoLayout worked a bit. Now RenderAutoLayout follows the same
delegate pattern we use for custom paint and custom layout.
Each layer is supposed to reexport the parts of the previous layer
that are part of its API.
- In painting.dart, export from dart:ui all the Canvas-related APIs
that make sense to be used at higher levels, e.g. PaintingStyle.
- Delete painting/shadows.dart. It was dead code.
- In rendering/object.dart, export all of painting.dart.
- In widgets/basic.dart, export all of painting.dart and
animation.dart. Some classes in animation/ are renamed to make this
less disruptive and confusing to the namespace.
- Split out Stocks back into an import model rather than a part model,
so that it's easier to manage its dependencies on a per-file basis.
- Move Ticker to scheduler library.
- Remove as many redundant imports as possible now.
- Some minor nit picking cleanup in various files.
The asserting will continue until morale improves!
* Convert all assert(*.isNormalized) checks to use the new
debugAssertIsNormalized technology.
* Convert CustomMultiChildLayout to use the new RenderingError
technology to greatly improve the detail in errors you get when
writing CustomMultiChildLayout delegates.
* Add BoxConstraints.copyWith().
* Indent the descendants in the rendering exception data dump so that
when you have multiple children it's clearer what's going on.
Negative constraints never make sense, so catch those too.
Make RenderObject.layout's isNormalized assert use the newer more fancy
debug version of isNormalized.