PhotoViewGallery class

A StatefulWidget that shows multiple PhotoView widgets in a PageView

Some of PhotoView constructor options are passed direct to PhotoViewGallery constructor. Those options will affect the gallery in a whole.

Some of the options may be defined to each image individually, such as initialScale or heroAttributes. Those must be passed via each PhotoViewGalleryPageOptions.

Example of usage as a list of options:

PhotoViewGallery(
  pageOptions: <PhotoViewGalleryPageOptions>[
    PhotoViewGalleryPageOptions(
      imageProvider: AssetImage("assets/gallery1.jpg"),
      heroAttributes: const HeroAttributes(tag: "tag1"),
    ),
    PhotoViewGalleryPageOptions(
      imageProvider: AssetImage("assets/gallery2.jpg"),
      heroAttributes: const HeroAttributes(tag: "tag2"),
      maxScale: PhotoViewComputedScale.contained * 0.3
    ),
    PhotoViewGalleryPageOptions(
      imageProvider: AssetImage("assets/gallery3.jpg"),
      minScale: PhotoViewComputedScale.contained * 0.8,
      maxScale: PhotoViewComputedScale.covered * 1.1,
      heroAttributes: const HeroAttributes(tag: "tag3"),
    ),
  ],
  loadingBuilder: (context, progress) => Center(
           child: Container(
             width: 20.0,
             height: 20.0,
             child: CircularProgressIndicator(
               value: _progress == null
                   ? null
                   : _progress.cumulativeBytesLoaded /
                       _progress.expectedTotalBytes,
             ),
           ),
         ),
  backgroundDecoration: widget.backgroundDecoration,
  pageController: widget.pageController,
  onPageChanged: onPageChanged,
)

Example of usage with builder pattern:

PhotoViewGallery.builder(
  scrollPhysics: const BouncingScrollPhysics(),
  builder: (BuildContext context, int index) {
    return PhotoViewGalleryPageOptions(
      imageProvider: AssetImage(widget.galleryItems[index].image),
      initialScale: PhotoViewComputedScale.contained * 0.8,
      minScale: PhotoViewComputedScale.contained * 0.8,
      maxScale: PhotoViewComputedScale.covered * 1.1,
      heroAttributes: HeroAttributes(tag: galleryItems[index].id),
    );
  },
  itemCount: galleryItems.length,
  loadingBuilder: (context, progress) => Center(
           child: Container(
             width: 20.0,
             height: 20.0,
             child: CircularProgressIndicator(
               value: _progress == null
                   ? null
                   : _progress.cumulativeBytesLoaded /
                       _progress.expectedTotalBytes,
             ),
           ),
         ),
  backgroundDecoration: widget.backgroundDecoration,
  pageController: widget.pageController,
  onPageChanged: onPageChanged,
)
Inheritance

Constructors

PhotoViewGallery({Key? key, required List<PhotoViewGalleryPageOptions>? pageOptions, LoadingBuilder? loadingBuilder, BoxDecoration? backgroundDecoration, bool gaplessPlayback = false, bool reverse = false, PageController? pageController, PhotoViewGalleryPageChangedCallback? onPageChanged, ValueChanged<PhotoViewScaleState>? scaleStateChangedCallback, bool enableRotation = false, ScrollPhysics? scrollPhysics, Axis scrollDirection = Axis.horizontal, Size? customSize, bool allowImplicitScrolling = false})
Construct a gallery with static items through a list of PhotoViewGalleryPageOptions.
const
PhotoViewGallery.builder({Key? key, required int? itemCount, required PhotoViewGalleryBuilder? builder, LoadingBuilder? loadingBuilder, BoxDecoration? backgroundDecoration, bool gaplessPlayback = false, bool reverse = false, PageController? pageController, PhotoViewGalleryPageChangedCallback? onPageChanged, ValueChanged<PhotoViewScaleState>? scaleStateChangedCallback, bool enableRotation = false, ScrollPhysics? scrollPhysics, Axis scrollDirection = Axis.horizontal, Size? customSize, bool allowImplicitScrolling = false})
Construct a gallery with dynamic items.
const

Properties

allowImplicitScrolling bool
When user attempts to move it to the next element, focus will traverse to the next page in the page view.
final
backgroundDecoration BoxDecoration?
Mirror to PhotoView.backgroundDecoration
final
builder PhotoViewGalleryBuilder?
Called to build items for the gallery when using PhotoViewGallery.builder
final
customSize Size?
Mirror to PhotoView.customSize
final
enableRotation bool
Mirror to PhotoView.enableRotation
final
gaplessPlayback bool
Mirror to PhotoView.gaplessPlayback
final
hashCode int
The hash code for this object.
no setterinherited
itemCount int?
The count of items in the gallery, only used when constructed via PhotoViewGallery.builder
final
key Key?
Controls how one widget replaces another widget in the tree.
finalinherited
loadingBuilder LoadingBuilder?
Mirror to PhotoView.loadingBuilder
final
onPageChanged PhotoViewGalleryPageChangedCallback?
An callback to be called on a page change
final
pageController PageController?
An object that controls the PageView inside PhotoViewGallery
final
pageOptions List<PhotoViewGalleryPageOptions>?
A list of options to describe the items in the gallery
final
reverse bool
Mirror to PageView.reverse
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
scaleStateChangedCallback ValueChanged<PhotoViewScaleState>?
Mirror to PhotoView.scaleStateChangedCallback
final
scrollDirection Axis
The axis along which the PageView scrolls. Mirror to PageView.scrollDirection
final
scrollPhysics ScrollPhysics?
ScrollPhysics for the internal PageView
final

Methods

createElement() StatefulElement
Creates a StatefulElement to manage this widget's location in the tree.
inherited
createState() State<StatefulWidget>
Creates the mutable state for this widget at a given location in the tree.
override
debugDescribeChildren() List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children.
inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep.
inherited
toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) String
A string representation of this object.
inherited
toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) String
Returns a string representation of this node and its descendants.
inherited
toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a one-line detailed description of the object.
inherited
toStringShort() String
A short, textual description of this widget.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited