anchor.diff:      Size bottomSheetSize = Size.zero;
       Size snackBarSize = Size.zero;
   
  -    if (isChild(_Child.bottomSheet)) {
  -      bottomSheetSize = layoutChild(_Child.bottomSheet, fullWidthConstraints);
  -      positionChild(_Child.bottomSheet, new Offset((size.width - bottomSheetSize.width) / 2.0, size.height - bottomSheetSize.height));
  -    }
  -
  -    if (isChild(_Child.snackBar)) {
  -      snackBarSize = layoutChild(_Child.snackBar, fullWidthConstraints);
  -      positionChild(_Child.snackBar, new Offset(0.0, size.height - snackBarSize.height));
  -    }
  -
  -    if (isChild(_Child.floatingActionButton)) {
  -      final Size fabSize = layoutChild(_Child.floatingActionButton, looseConstraints);
  +    if (isChild(_ScaffoldSlot.bottomSheet)) {
  +      bottomSheetSize = layoutChild(_ScaffoldSlot.bottomSheet, fullWidthConstraints);
  +      positionChild(_ScaffoldSlot.bottomSheet, new Offset((size.width - bottomSheetSize.width) / 2.0, size.height - bottomSheetSize.height));
  +    }
  +
  +    if (isChild(_ScaffoldSlot.snackBar)) {
  +      snackBarSize = layoutChild(_ScaffoldSlot.snackBar, fullWidthConstraints);
  +      positionChild(_ScaffoldSlot.snackBar, new Offset(0.0, size.height - snackBarSize.height));
  +    }
  +
  +    if (isChild(_ScaffoldSlot.floatingActionButton)) {
  +      final Size fabSize = layoutChild(_ScaffoldSlot.floatingActionButton, looseConstraints);
         final double fabX = size.width - fabSize.width - _kFloatingActionButtonMargin;
         double fabY = size.height - fabSize.height - _kFloatingActionButtonMargin;
         if (snackBarSize.height > 0.0)
           fabY = math.min(fabY, size.height - snackBarSize.height - fabSize.height - _kFloatingActionButtonMargin);
         if (bottomSheetSize.height > 0.0)
           fabY = math.min(fabY, size.height - bottomSheetSize.height - fabSize.height / 2.0);
  -      positionChild(_Child.floatingActionButton, new Offset(fabX, fabY));
  -    }
  -
  -    if (isChild(_Child.drawer)) {
  -      layoutChild(_Child.drawer, new BoxConstraints.tight(size));
  -      positionChild(_Child.drawer, Offset.zero);
  +      positionChild(_ScaffoldSlot.floatingActionButton, new Offset(fabX, fabY));
  +    }
  +
  +    if (isChild(_ScaffoldSlot.drawer)) {
  +      layoutChild(_ScaffoldSlot.drawer, new BoxConstraints.tight(size));
  +      positionChild(_ScaffoldSlot.drawer, Offset.zero);
       }
     }
   
  
positive.code: const double _kFloatingActionButtonMargin = 16.0; // TODO(hmuller): should be device dependent
  const Duration _kFloatingActionButtonSegue = const Duration(milliseconds: 400);
  
  enum _Child {
    body,
    toolBar,
    bottomSheet,
  
negative.code:         children: bottomSheets,
          alignment: const FractionalOffset(0.5, 1.0) // bottom-aligned, centered
        );
        _addIfNonNull(children, stack, _ScaffoldSlot.bottomSheet);
      }
  
      if (_snackBars.isNotEmpty)
        _addIfNonNull(children, _snackBars.first._widget, _ScaffoldSlot.snackBar);
  
      if (config.floatingActionButton != null) {
        Widget fab = new _FloatingActionButtonTransition(
          key: new ValueKey<Key>(config.floatingActionButton.key),
          child: config.floatingActionButton
        );
        children.add(new LayoutId(child: fab, id: _ScaffoldSlot.floatingActionButton));
      }
  
      if (config.drawer != null) {
        children.add(new LayoutId(
          id: _ScaffoldSlot.drawer,
          child: new DrawerController(
            key: _drawerKey,
            child: config.drawer
  