showStreamAttachmentPickerModalBottomSheet<T> function

Future<T?> showStreamAttachmentPickerModalBottomSheet<T>({
  1. required BuildContext context,
  2. Iterable<AttachmentPickerOption>? customOptions,
  3. List<AttachmentPickerType> allowedTypes = AttachmentPickerType.values,
  4. List<Attachment>? initialAttachments,
  5. StreamAttachmentPickerController? controller,
  6. ErrorListener? onError,
  7. Color? backgroundColor,
  8. double? elevation,
  9. BoxConstraints? constraints,
  10. Color? barrierColor,
  11. bool isScrollControlled = false,
  12. bool useRootNavigator = false,
  13. bool isDismissible = true,
  14. bool enableDrag = true,
  15. RouteSettings? routeSettings,
  16. AnimationController? transitionAnimationController,
  17. Clip? clipBehavior = Clip.hardEdge,
  18. ShapeBorder? shape,
  19. ThumbnailSize attachmentThumbnailSize = const ThumbnailSize(400, 400),
  20. ThumbnailFormat attachmentThumbnailFormat = ThumbnailFormat.jpeg,
  21. int attachmentThumbnailQuality = 100,
  22. double attachmentThumbnailScale = 1,
})

Shows a modal material design bottom sheet.

A modal bottom sheet is an alternative to a menu or a dialog and prevents the user from interacting with the rest of the app.

A closely related widget is a persistent bottom sheet, which shows information that supplements the primary content of the app without preventing the use from interacting with the app. Persistent bottom sheets can be created and displayed with the showBottomSheet function or the ScaffoldState.showBottomSheet method.

The context argument is used to look up the Navigator and Theme for the bottom sheet. It is only used when the method is called. Its corresponding widget can be safely removed from the tree before the bottom sheet is closed.

The isScrollControlled parameter specifies whether this is a route for a bottom sheet that will utilize DraggableScrollableSheet. If you wish to have a bottom sheet that has a scrollable child such as a ListView or a GridView and have the bottom sheet be draggable, you should set this parameter to true.

The useRootNavigator parameter ensures that the root navigator is used to display the BottomSheet when set to true. This is useful in the case that a modal BottomSheet needs to be displayed above all other content but the caller is inside another Navigator.

The isDismissible parameter specifies whether the bottom sheet will be dismissed when user taps on the scrim.

The enableDrag parameter specifies whether the bottom sheet can be dragged up and down and dismissed by swiping downwards.

The optional backgroundColor, elevation, shape, clipBehavior, constraints and transitionAnimationController parameters can be passed in to customize the appearance and behavior of modal bottom sheets (see the documentation for these on BottomSheet for more details).

The transitionAnimationController controls the bottom sheet's entrance and exit animations if provided.

The optional routeSettings parameter sets the RouteSettings of the modal bottom sheet sheet. This is particularly useful in the case that a user wants to observe PopupRoutes within a NavigatorObserver.

Returns a Future that resolves to the value (if any) that was passed to Navigator.pop when the modal bottom sheet was closed.

See also:

Implementation

Future<T?> showStreamAttachmentPickerModalBottomSheet<T>({
  required BuildContext context,
  Iterable<AttachmentPickerOption>? customOptions,
  List<AttachmentPickerType> allowedTypes = AttachmentPickerType.values,
  List<Attachment>? initialAttachments,
  StreamAttachmentPickerController? controller,
  ErrorListener? onError,
  Color? backgroundColor,
  double? elevation,
  BoxConstraints? constraints,
  Color? barrierColor,
  bool isScrollControlled = false,
  bool useRootNavigator = false,
  bool isDismissible = true,
  bool enableDrag = true,
  RouteSettings? routeSettings,
  AnimationController? transitionAnimationController,
  Clip? clipBehavior = Clip.hardEdge,
  ShapeBorder? shape,
  ThumbnailSize attachmentThumbnailSize = const ThumbnailSize(400, 400),
  ThumbnailFormat attachmentThumbnailFormat = ThumbnailFormat.jpeg,
  int attachmentThumbnailQuality = 100,
  double attachmentThumbnailScale = 1,
}) {
  final colorTheme = StreamChatTheme.of(context).colorTheme;
  final color = backgroundColor ?? colorTheme.inputBg;

  return showModalBottomSheet<T>(
    context: context,
    backgroundColor: color,
    elevation: elevation,
    shape: shape,
    clipBehavior: clipBehavior,
    constraints: constraints,
    barrierColor: barrierColor,
    isScrollControlled: isScrollControlled,
    useRootNavigator: useRootNavigator,
    isDismissible: isDismissible,
    enableDrag: enableDrag,
    routeSettings: routeSettings,
    transitionAnimationController: transitionAnimationController,
    builder: (BuildContext context) {
      return StreamPlatformAttachmentPickerBottomSheetBuilder(
        controller: controller,
        initialAttachments: initialAttachments,
        builder: (context, controller, child) {
          final currentPlatform = defaultTargetPlatform;
          final isWebOrDesktop = kIsWeb ||
              currentPlatform == TargetPlatform.macOS ||
              currentPlatform == TargetPlatform.linux ||
              currentPlatform == TargetPlatform.windows;

          if (isWebOrDesktop) {
            return webOrDesktopAttachmentPickerBuilder.call(
              context: context,
              onError: onError,
              controller: controller,
              allowedTypes: allowedTypes,
              customOptions: customOptions?.map(
                WebOrDesktopAttachmentPickerOption.fromAttachmentPickerOption,
              ),
              attachmentThumbnailSize: attachmentThumbnailSize,
              attachmentThumbnailFormat: attachmentThumbnailFormat,
              attachmentThumbnailQuality: attachmentThumbnailQuality,
              attachmentThumbnailScale: attachmentThumbnailScale,
            );
          }

          return mobileAttachmentPickerBuilder.call(
            context: context,
            onError: onError,
            controller: controller,
            allowedTypes: allowedTypes,
            customOptions: customOptions,
            attachmentThumbnailSize: attachmentThumbnailSize,
            attachmentThumbnailFormat: attachmentThumbnailFormat,
            attachmentThumbnailQuality: attachmentThumbnailQuality,
            attachmentThumbnailScale: attachmentThumbnailScale,
          );
        },
      );
    },
  );
}