show static method
Future<bool>
show({
- required List<
CNSheetPage> pages, - List<
CNSheetDetent> detents = const [CNSheetDetent.medium, CNSheetDetent.large], - CNSheetDetent? initialDetent,
- CNSheetDetent? undimmedDetent,
- bool dismissible = true,
- bool showGrabber = true,
- int selectedPage = 0,
- Color? tintColor,
- bool? isDark,
- void onDetentChanged(
- CNSheetDetent detent
- void onPageSelected(
- int page
- void onItemTap()?,
- void onButtonTap()?,
- VoidCallback? onDismissed,
Presents the sheet with pages.
detents are the heights the sheet rests at, and initialDetent the
one it opens at (the first by default). Up to and including
undimmedDetent, the app behind the sheet is not dimmed and stays
interactive; null dims it at every height. dismissible false keeps
the sheet from being dragged closed. isDark sets the sheet's
appearance; null follows the system.
Returns whether the sheet was shown.
Implementation
static Future<bool> show({
required List<CNSheetPage> pages,
List<CNSheetDetent> detents = const [
CNSheetDetent.medium,
CNSheetDetent.large,
],
CNSheetDetent? initialDetent,
CNSheetDetent? undimmedDetent,
bool dismissible = true,
bool showGrabber = true,
int selectedPage = 0,
Color? tintColor,
bool? isDark,
void Function(CNSheetDetent detent)? onDetentChanged,
void Function(int page)? onPageSelected,
void Function(int page, int index)? onItemTap,
void Function(int page, String id)? onButtonTap,
VoidCallback? onDismissed,
}) async {
assert(pages.isNotEmpty && detents.isNotEmpty);
assert(initialDetent == null || detents.contains(initialDetent));
assert(undimmedDetent == null || detents.contains(undimmedDetent));
if (kIsWeb ||
(defaultTargetPlatform != TargetPlatform.iOS &&
defaultTargetPlatform != TargetPlatform.macOS)) {
return false;
}
_detents = List.unmodifiable(detents);
_onDetentChanged = onDetentChanged;
_onPageSelected = onPageSelected;
_onItemTap = onItemTap;
_onButtonTap = onButtonTap;
_onDismissed = onDismissed;
_channel.setMethodCallHandler(_handle);
final shown = await _channel.invokeMethod<bool>('show', {
'pages': [for (final p in pages) _pageMap(p)],
'detents': [for (final d in detents) d._toMap()],
'initialDetent': initialDetent == null
? 0
: detents.indexOf(initialDetent),
if (undimmedDetent != null)
'undimmedDetent': detents.indexOf(undimmedDetent),
'dismissible': dismissible,
'showGrabber': showGrabber,
'selectedPage': selectedPage,
if (tintColor != null) 'tint': tintColor.toARGB32(),
if (isDark != null) 'isDark': isDark,
});
_shown = shown ?? false;
if (!_shown) _reset();
return _shown;
}