show static method
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 indexBuilder(
- BuildContext context,
- int index,
- 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);
},
);
}