universal_file_previewer

pub.dev Platform License: MIT

Preview 50+ file formats in Flutter with zero heavy dependencies.
Uses pure Dart for text-based formats and native platform channels for PDF, video, and audio.


✨ Supported Formats

Category Formats Renderer
Images JPG, PNG, GIF, WebP, BMP, SVG, HEIC, TIFF Flutter native
PDF PDF Platform channel
Video MP4, MOV, AVI, MKV, WebM Platform channel
Audio MP3, WAV, AAC, FLAC, OGG Platform channel
Code Dart, Python, JS, TS, Kotlin, Java, + more Pure Dart
Text TXT, Markdown, CSV, JSON, XML, HTML, LOG Pure Dart
Archive ZIP (browsable file tree) Pure Dart
Docs DOCX, XLSX, PPTX (metadata view) Fallback
Unknown Any file β†’ metadata + size + type Fallback

πŸš€ Installation

dependencies:
  universal_file_previewer: ^0.3.0

πŸ“± Quick Start

Full-screen preview page

import 'package:universal_file_previewer/universal_file_previewer.dart';

// From local file
FilePreviewPage.open(context, file: File('/path/to/document.pdf'));

// From URL (automatically downloaded and cached)
FilePreviewPage.open(context, url: 'https://example.com/document.pdf');

Inline widget

// Local
FilePreviewWidget(file: File('/path/to/file.md'))

// Remote
FilePreviewWidget(url: 'https://example.com/file.md')

With controller (PDF page navigation)

final controller = PreviewController();

// Widget
FilePreviewWidget(
  file: myPdfFile,
  controller: controller,
)

// Control programmatically
controller.nextPage();
controller.previousPage();
controller.goToPage(5);
controller.zoomIn();
controller.zoomOut();

Detect file type only

final type = await FileDetector.detect(File('/path/to/file'));
print(type); // FileType.pdf

// From bytes
final type = FileDetector.detectFromBytes(bytes, fileName: 'doc.pdf');

βš™οΈ Configuration

PreviewConfig(
  showToolbar: true,          // Show AppBar (in FilePreviewPage)
  showFileInfo: true,         // Show info button in toolbar
  enableZoom: true,           // Pinch-to-zoom for images & PDF
  backgroundColor: Colors.black,
  codeTheme: CodeTheme.dark,  // dark | light | dracula | monokai
  maxTextFileSizeBytes: 5 * 1024 * 1024,  // 5 MB limit for text files
  errorBuilder: (err) => MyErrorWidget(err),
  loadingBuilder: () => MyLoadingWidget(),
)

πŸ—οΈ Architecture

FilePreviewWidget
  β”‚
  β”œβ”€β”€ FileDetector          ← Magic bytes + extension fallback
  β”‚     └── Pure Dart, reads first 16 bytes
  β”‚
  β”œβ”€β”€ ImageRenderer         ← Flutter Image.file + InteractiveViewer
  β”œβ”€β”€ SvgRenderer           ← Pure Dart SVG content display
  β”œβ”€β”€ HeicRenderer          ← Platform channel β†’ JPEG conversion
  β”‚
  β”œβ”€β”€ PdfRenderer           ← Platform channel (PDFKit / PdfRenderer API)
  β”‚
  β”œβ”€β”€ VideoRenderer         ← Platform channel (AVPlayer / ExoPlayer)
  β”œβ”€β”€ AudioRenderer         ← Platform channel + animated waveform UI
  β”‚
  β”œβ”€β”€ TextRenderer          ← Pure Dart, SelectableText
  β”œβ”€β”€ MarkdownRenderer      ← Pure Dart parser, no packages
  β”œβ”€β”€ JsonRenderer          ← Pure Dart collapsible tree
  β”œβ”€β”€ CsvRenderer           ← Pure Dart DataTable
  β”œβ”€β”€ CodeRenderer          ← Pure Dart syntax tokenizer
  β”‚
  β”œβ”€β”€ ZipRenderer           ← Pure Dart ZIP spec parser (browsable tree)
  β”‚
  └── FallbackRenderer      ← File metadata (name, size, type, date)

πŸ“¦ Dependencies

dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.1
  path_provider: ^2.1.3

πŸ”Œ Platform Requirements

Android

  • minSdkVersion 21 (PDF rendering requires API 21+)
  • HEIC support requires Android 9+ (API 28+)

iOS

  • iOS 11.0+
  • PDFKit available since iOS 11

Add to android/app/build.gradle:

android {
    defaultConfig {
        minSdkVersion 21
    }
}

πŸ—ΊοΈ Roadmap

  • x Image rendering (JPG, PNG, GIF, WebP, BMP)
  • x SVG display
  • x PDF rendering (platform channel)
  • x Video thumbnail + metadata
  • x Audio player UI with waveform
  • x Markdown renderer (pure Dart)
  • x JSON tree viewer (pure Dart)
  • x CSV table renderer (pure Dart)
  • x Syntax highlighted code viewer (pure Dart)
  • x ZIP archive browser (pure Dart)
  • x HEIC conversion (platform channel)
  • DOCX β†’ HTML conversion (pure Dart XML parser)
  • XLSX spreadsheet renderer (pure Dart)
  • PPTX slide viewer
  • 3D model viewer (GLB/OBJ)
  • RAR/7Z archive support
  • Thumbnail generation API

🀝 Contributing

PRs welcome! Please read CONTRIBUTING.md first.

git clone https://github.com/Naimish-Kumar/universal_file_previewer
cd universal_file_previewer
flutter pub get
cd example && flutter run

πŸ“„ License

MIT License β€” see LICENSE for details.

Libraries

universal_file_previewer
Universal File Previewer Preview 50+ file formats with zero heavy dependencies.