builder method
Implementation
Widget builder(BuildContext context, BoxConstraints constraints)
{
/// Pages on Navigator stack rebuild when a new page is pushed
/// https://github.com/flutter/flutter/issues/11655
/// This hack prevents the page that is being navigated away from
/// from rebuilding
var index = NavigationManager().positionInStack(context);
if (index != 0)
{
Log().debug('Framework ${widget.model.templateName} was not built since its index ($index) != 0"/>');
return Offstage();
}
// model is initializing
if (!widget.model.initialized) return Scaffold(body: Center(child: BusyView(BusyModel(null, visible: true))));
// set the system constraints
widget.model.setLayoutConstraints(constraints);
// Log().debug('Build called on framework view => <FML name=${widget.model.templateName} url="${widget.model.url}"/>');
// stop listening during build
widget.model.removeListener(this);
// fire navigator change
onNavigatorChange();
// set device orientation
_setDeviceOrientation(widget.model.orientation);
// post onstart callback
if (!started)
{
started = true;
WidgetsBinding.instance.addPostFrameCallback((_) => widget.model.onStart(context));
}
// build framework header
Widget header = _buildHeader(constraints);
// build framework footer
Widget footer = _buildFooter(constraints);
// build framework body
Widget body = _buildBody(constraints);
// framework is header, body, footer stacked in a single column inside a fixed frame
Widget view = Column(children: [header, body, footer]);
// We need to provide the stacks children to drawer because positioned
// widgets must be direct children but the drawer uses a builder widget
DrawerView? drawer;
if (widget.model.drawer != null)
{
drawer = DrawerView(widget.model.drawer!, view);
view = Stack(children: [view,drawer]);
}
// wrap view in gesture detector
view = _getGestureDetector(view,drawer);
// scaffold with safe area
view = SafeArea(child: Scaffold(resizeToAvoidBottomInset: true, body: view));
// start listening to model changes
widget.model.registerListener(this);
return view;
}