show method
void
show(
- BuildContext context,
- DialogWidget dialog, {
- bool rootOverlay = true,
- int? id,
- bool hidePrevious = true,
Implementation
void show(BuildContext context, DialogWidget dialog, {bool rootOverlay = true, int? id, bool hidePrevious = true}) {
if (hidePrevious || id == null) hideImmediate(context);
OverlayState? overlayState = rootOverlay
? context.findRootAncestorStateOfType<OverlayState>()
: context.findAncestorStateOfType<OverlayState>();
if (dialog.closable) {
_currentCallback.add(
IndexedData<Future<bool> Function()>(
id: id,
data: () {
hide(context, id: id);
return Future.value(false);
})
);
} else {
_currentCallback.add(
IndexedData<Future<bool> Function()>(
id: id,
data: () => Future.value(true)
)
);
}
if (_currentCallback.length == 1) {
ModalRoute.of(context)?.addScopedWillPopCallback(onWillPop);
}
final StreamController<double> controller = StreamController();
final OverlayEntry overlayEntry = OverlayEntry(
builder: (_) => AppearWidget(
child: Stack(
children: <Widget>[
GestureDetector(
onTap: () => dialog.closable ? hide(context) : (){},
child: Container(
color: BACKGROUND_COLOR,
),
),
dialog
],
),
progress: controller.stream,
duration: DEFAULT_DURATION,
style: AppearStyle.opacity,
),
);
_currentController.add(
IndexedData<StreamController<double>>(
id: id,
data: controller
)
);
_currentOverlay.add(
IndexedData<OverlayEntry>(
id: id,
data: overlayEntry
)
);
overlayState?.insert(overlayEntry);
controller.add(1.0);
}