Gallery Demos: button, dialog, snack bar
Added button, dialog, and snack bar gallery demos.
Split gallery main.dart into files in the lib/gallery subdirectory.
Enable TabBarSelectionState to deal with the PageStorage saved selected value no longer equalling any value.
Changed the color of Dialog text to match the theme's caption color.
Also: uppercased tab labels per #1617
The "leaf merge" feature was getting confused when we reset the
SemanticsNode. We now separately track whether the node itself is marked
as being merged vs whether we inherited that state, and we don't reset
the inherited state until you're reattached or reserialised. In the
latter case, we do a "just in time" clearing of the flag just like we
previously did a "just in time" setting of the flag, except now the flag
we're setting or clearing is the inherited flag not the actual flag.
There are no clients anymore. We added it for the Drawer a while ago,
which is a use case that's now better covered by AnimatedModalBarrier,
complete with semantics.
* Use actual exceptions rather than assertions containing code
containing strings when trying to give messages to authors.
* Introduce RenderingError which is an AssertionError that takes a
string argument, to support the above.
* Provide a BoxDimensions.hasBoundedWidth/hasBoundedHeight API.
* Document BoxDimensions.isNormalized.
* Provide more useful information when we assert isNormalized and find
that it is false.
* When finding the size is infinite, crawl the tree to figure out which
render box is likely responsible for the infinite constraints.
* Provide more information when size doesn't match the constraints.
* Provide more information when intrinsic dimension methods violate the
constraints.
* Only spam a huge amount of information for the first exception from
the rendering library. I've noticed a lot of people looking at the
last exception printed rather than the first and that's very
misleading -- after the rendering library hits an exception, all bets
are off regarding what'll happen in the future. All kinds of asserts
might fire.
* Improve docs around the debug methods and flags for the above.
* Make Block default to have no children. Previously, giving no children
crashed with a confusing message about a null deref in an assert.
This splits flx.build() into two methods, flx.build() and
flx.assemble(). builD() now does the following:
1) constructs the manifest map by reading the manifest from the
file system
2) "compiles" the dart code into the snapshot file
3) Invokes assemble()
This allows external build toolchains to construct their own
manifest map (possibly using a different manifest syntax)
and create their own snapshot file