Skip to content
Related Articles

Related Articles

Flutter – InteractiveViewer Widget

View Discussion
Improve Article
Save Article
Like Article
  • Last Updated : 29 Apr, 2022

You have come across various situations when your image is too large for the mobile screen or the content of your table is not fitting. For this kind of situation, Flutter provides a Widget called InteractiveViewer Widget. This basically provides you with the feature of showing the entire widget in scrollable format or by zooming in or out of the widget. A sample video is given below to get an idea about what we are going to do in this article.


    Key? key, 
    required Widget child
    Clip clipBehavior = Clip.hardEdge, 
    bool alignPanAxis = false, 
    EdgeInsets boundaryMargin =, 
    bool constrained = true, 
    double maxScale = 2.5, 
    double minScale = 0.8, 
    GestureScaleEndCallback? onInteractionEnd, 
    GestureScaleStartCallback? onInteractionStart, 
    GestureScaleUpdateCallback? onInteractionUpdate,
    bool panEnabled = true, 
    bool scaleEnabled = true, 
    TransformationController? transformationController


  • alignPanAxis: If true, panning is only allowed in the direction of the horizontal axis or the vertical axis.
  • boundaryMargin: A margin for the visible boundaries of the child.
  • builder: Builds the child of this widget.
  • child: The child Widget that is transformed by InteractiveViewer.
  • clipBehavior: If set to Clip.none, the child may extend beyond the size of the InteractiveViewer, but it will not receive gestures in these areas. Be sure that the InteractiveViewer is the desired size when using Clip.none.
  • constrained: Whether the normal size constraints at this point in the widget tree are applied to the child.
  • hashCode: The hash code for this object.
  • key: Controls how one widget replaces another widget in the tree.
  • maxScale: The maximum allowed scale.
  • minScale: The minimum allowed scale.
  • onInteractionEnd: Called when the user ends a pan or scale gesture on the widget.
  • onInteractionStart: Called when the user begins a pan or scale gesture on the widget.
  • onInteractionUpdate: Called when the user updates a pan or scale gesture on the widget.
  • panEnabled: If false, the user will be prevented from panning.
  • runtimeType: A representation of the runtime type of the object.
  • scaleEnabled: If false, the user will be prevented from scaling.
  • transformationController: A TransformationController for the transformation performed on the child. 



import 'package:flutter/material.dart';
void main() {
  runApp(const MyApp());
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  // This is the root of your application
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
      home: const GFG(),
      debugShowCheckedModeBanner: false,
// Creating a stateless widget
class GFG extends StatelessWidget {
  const GFG({Key? key}) : super(key: key);
  Widget build(BuildContext context) {
    // Base of your application
    return Scaffold(
      // Widget to make everything
      // inside it center
      body: Center(
        child: InteractiveViewer(
          // boundary of image
          boundaryMargin: const EdgeInsets.all(20),
          minScale: 0.1,
          maxScale: 1.6,
          child: Container(
            height: 700, 
            width: 500,
            // Using image from local storage
            child: Image.asset(


Before using InteractiveViewer:

After using InteractiveViwer:


  1. First, create the stateless main widget.
  2. Second, use InteractiveViewer inside the Center widget.
  3. Third, use the boundaryMargin to set boundaries for widgets.
  4. Add the widget you want in the child of InteractiveViewer.

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!