Our track and head were slightly off in size.
These now exactly match the sizes in
https://material.google.com/components/selection-controls.html#selection-controls-switch
We took the liberty of assuming the head overlaps the edge
of the track by 2 pixels (instead of the head and the track ending at the same point)
which the provided designs were conflicted about.
Huge thanks to @DaveShuckerow for noticing this issue!
@abarth
This prevents multiple simultaneous runs of the analyzer from stomping
over each other (e.g. multiple runs of 'update-packages'). Certain
long-lived commands (like analyze, run, logs) are exempted once they've
done enough work to be safe from most stomping action.
This still doesn't make us entirely safe from craziness, e.g. if you're
half way through an 'update-packages' run and you call 'git pull', who
knows what state you'll end up in. But there's only so much one can do.
Fixes https://github.com/flutter/flutter/issues/2762
Also, make it clear the screen between results so it's more obvious
what's going on when you have new results (especially when you have
fixed everything).
We now use the `@required` annotation to encourage developers to
explicitly set onPressed and onChanged callbacks to null when that would
disable the widget.
Fixes#287
If you tap outside the drop down menu while its animating in, we should
animate it away smoothly. Previously, we jumped to the reverseCurve,
which made the menu disappear immediately. Now we hold the animations as
state, which means we keep their _curveDirection property and don't
switch curves unless the animation actually finishes.
Also, fix a subtle bug in CurvedAnimation whereby we'd never set the
_curveDirection if we didn't see a status change in the parent
animation. Now we initialize _curveDirection based on the current value
of the parent's status.
Fixes#4379
Instead of using getTotalMatrix and setMatrix, we can just use
save/restore, which is more idiomatic.
The getTotalMatrix/setMatrix pattern was introduced to improve
performance, but the original code was calling getTotalMatrix/setMatrix
at every node in the sprite tree, which is much slower than the normal
save/transform/restore pattern.
Related to #4254