PersistentBottomSheetController showBottomSheet(WidgetBuilder builder)

Shows a persistent material design bottom sheet.

A persistent bottom sheet shows information that supplements the primary content of the app. A persistent bottom sheet remains visible even when the user interacts with other parts of the app.

A closely related widget is a modal bottom sheet, which is an alternative to a menu or a dialog and prevents the user from interacting with the rest of the app. Modal bottom sheets can be created and displayed with the showModalBottomSheet function.

Returns a contoller that can be used to close and otherwise manipulate the button sheet.

See also:

Source

PersistentBottomSheetController<dynamic/*=T*/> showBottomSheet/*<T>*/(WidgetBuilder builder) {
  if (_currentBottomSheet != null) {
    _currentBottomSheet.close();
    assert(_currentBottomSheet == null);
  }
  Completer<dynamic/*=T*/> completer = new Completer<dynamic/*=T*/>();
  GlobalKey<_PersistentBottomSheetState> bottomSheetKey = new GlobalKey<_PersistentBottomSheetState>();
  AnimationController controller = BottomSheet.createAnimationController(this)
    ..forward();
  _PersistentBottomSheet bottomSheet;
  LocalHistoryEntry entry = new LocalHistoryEntry(
    onRemove: () {
      assert(_currentBottomSheet._widget == bottomSheet);
      assert(bottomSheetKey.currentState != null);
      bottomSheetKey.currentState.close();
      if (controller.status != AnimationStatus.dismissed)
        _dismissedBottomSheets.add(bottomSheet);
      setState(() {
        _currentBottomSheet = null;
      });
      completer.complete();
    }
  );
  bottomSheet = new _PersistentBottomSheet(
    key: bottomSheetKey,
    animationController: controller,
    onClosing: () {
      assert(_currentBottomSheet._widget == bottomSheet);
      entry.remove();
    },
    onDismissed: () {
      if (_dismissedBottomSheets.contains(bottomSheet)) {
        setState(() {
          _dismissedBottomSheets.remove(bottomSheet);
        });
      }
    },
    builder: builder
  );
  ModalRoute.of(context).addLocalHistoryEntry(entry);
  setState(() {
    _currentBottomSheet = new PersistentBottomSheetController<dynamic/*=T*/>._(
      bottomSheet,
      completer,
      () => entry.remove(),
      (VoidCallback fn) { bottomSheetKey.currentState?.setState(fn); }
    );
  });
  return _currentBottomSheet;
}