David PHAM-VAN

Add LayoutWidgetBuilder

@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 ## 1.14.0 3 ## 1.14.0
4 4
5 - A borderRadius can only be given for a uniform Border 5 - A borderRadius can only be given for a uniform Border
  6 +- Add LayoutWidgetBuilder
6 7
7 ## 1.13.0 8 ## 1.13.0
8 9
@@ -675,6 +675,33 @@ class Builder extends StatelessWidget { @@ -675,6 +675,33 @@ class Builder extends StatelessWidget {
675 Widget build(Context context) => builder(context); 675 Widget build(Context context) => builder(context);
676 } 676 }
677 677
  678 +/// The signature of the [LayoutBuilder] builder function.
  679 +typedef LayoutWidgetBuilder = Widget Function(
  680 + Context context, BoxConstraints constraints);
  681 +
  682 +/// Builds a widget tree that can depend on the parent widget's size.
  683 +class LayoutBuilder extends StatelessWidget {
  684 + /// Creates a widget that defers its building until layout.
  685 + LayoutBuilder({
  686 + @required this.builder,
  687 + }) : assert(builder != null);
  688 +
  689 + /// Called at layout time to construct the widget tree.
  690 + final LayoutWidgetBuilder builder;
  691 +
  692 + BoxConstraints _constraints;
  693 +
  694 + @override
  695 + void layout(Context context, BoxConstraints constraints,
  696 + {bool parentUsesSize = false}) {
  697 + _constraints = constraints;
  698 + super.layout(context, constraints);
  699 + }
  700 +
  701 + @override
  702 + Widget build(Context context) => builder(context, _constraints);
  703 +}
  704 +
678 class FullPage extends SingleChildWidget { 705 class FullPage extends SingleChildWidget {
679 FullPage({ 706 FullPage({
680 @required this.ignoreMargins, 707 @required this.ignoreMargins,