show static method

Future<void> show({
  1. BuildContext? context,
  2. required List<String> images,
  3. int startPosition = 0,
  4. bool loop = true,
  5. bool vertical = false,
  6. bool doubleScale = true,
  7. bool showIndex = true,
  8. bool closeable = false,
  9. bool closeOnTap = true,
  10. BetterImagePreviewClosePosition closePosition = BetterImagePreviewClosePosition.topRight,
  11. Color backgroundColor = Colors.black,
  12. double minScale = 1,
  13. double maxScale = 4,
  14. Duration transitionDuration = const Duration(milliseconds: 250),
  15. ValueChanged<int>? onChange,
  16. ValueChanged<int>? onClose,
  17. BetterImagePreviewImageBuilder? imageBuilder,
  18. BetterImagePreviewBuilder? loadingBuilder,
  19. BetterImagePreviewBuilder? errorBuilder,
  20. Widget indexBuilder(
    1. BuildContext context,
    2. int index,
    3. int total
    )?,
})

Opens a full-screen image preview.

images must not be empty. HTTP(S) values are loaded as network images; other values are treated as Flutter asset names. The returned future completes after the preview has closed.

Implementation

static Future<void> show({
  BuildContext? context,
  required List<String> images,
  int startPosition = 0,
  bool loop = true,
  bool vertical = false,
  bool doubleScale = true,
  bool showIndex = true,
  bool closeable = false,
  bool closeOnTap = true,
  BetterImagePreviewClosePosition closePosition =
      BetterImagePreviewClosePosition.topRight,
  Color backgroundColor = Colors.black,
  double minScale = 1,
  double maxScale = 4,
  Duration transitionDuration = const Duration(milliseconds: 250),
  ValueChanged<int>? onChange,
  ValueChanged<int>? onClose,
  BetterImagePreviewImageBuilder? imageBuilder,
  BetterImagePreviewBuilder? loadingBuilder,
  BetterImagePreviewBuilder? errorBuilder,
  Widget Function(BuildContext context, int index, int total)? indexBuilder,
}) async {
  assert(images.isNotEmpty, 'images must not be empty');
  assert(minScale > 0, 'minScale must be greater than zero');
  assert(maxScale >= minScale, 'maxScale must be >= minScale');
  if (images.isEmpty) {
    throw ArgumentError.value(images, 'images', 'must not be empty');
  }
  if (minScale <= 0 || maxScale < minScale) {
    throw ArgumentError('Expected 0 < minScale <= maxScale');
  }

  final previewContext = context ?? BetterUi.currentContext;
  if (previewContext == null) {
    throw StateError(
      'No BuildContext is available. Pass context or configure '
      'BetterUi.navigatorKey on your app.',
    );
  }
  final safeStart = startPosition.clamp(0, images.length - 1);

  await showGeneralDialog<void>(
    context: previewContext,
    barrierDismissible: false,
    barrierLabel: MaterialLocalizations.of(
      previewContext,
    ).modalBarrierDismissLabel,
    barrierColor: Colors.transparent,
    transitionDuration: transitionDuration,
    pageBuilder: (context, animation, secondaryAnimation) {
      return _BetterImagePreviewView(
        images: List<String>.unmodifiable(images),
        startPosition: safeStart,
        loop: loop,
        vertical: vertical,
        doubleScale: doubleScale,
        showIndex: showIndex,
        closeable: closeable,
        closeOnTap: closeOnTap,
        closePosition: closePosition,
        backgroundColor: backgroundColor,
        minScale: minScale,
        maxScale: maxScale,
        onChange: onChange,
        onClose: onClose,
        imageBuilder: imageBuilder,
        loadingBuilder: loadingBuilder,
        errorBuilder: errorBuilder,
        indexBuilder: indexBuilder,
      );
    },
    transitionBuilder: (context, animation, secondaryAnimation, child) {
      return FadeTransition(opacity: animation, child: child);
    },
  );
}