file_preview_kit 0.0.6 copy "file_preview_kit: ^0.0.6" to clipboard
file_preview_kit: ^0.0.6 copied to clipboard

Flutter widgets and parsers for readable XLSX, CSV, and DOCX previews.

example/lib/main.dart

import 'package:file_picker/file_picker.dart';
import 'package:file_preview_kit/file_preview_kit.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(const ExampleApp());
}

class ExampleApp extends StatelessWidget {
  const ExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'File Preview Kit Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.black,
          dynamicSchemeVariant: DynamicSchemeVariant.monochrome,
        ),
        useMaterial3: true,
      ),
      home: const ExcelPreviewExamplePage(),
    );
  }
}

class ExcelPreviewExamplePage extends StatefulWidget {
  const ExcelPreviewExamplePage({super.key});

  @override
  State<ExcelPreviewExamplePage> createState() =>
      _ExcelPreviewExamplePageState();
}

class _ExcelPreviewExamplePageState extends State<ExcelPreviewExamplePage> {
  Uint8List? _bytes;
  String? _fileName;

  Future<void> _pickFile() async {
    final result = await FilePicker.pickFiles(
      type: FileType.custom,
      allowedExtensions: ['xlsx', 'csv', 'docx'],
      withData: true,
    );

    if (result == null || result.files.isEmpty) {
      return;
    }

    final file = result.files.single;

    if (file.bytes == null) {
      return;
    }

    setState(() {
      _bytes = file.bytes;
      _fileName = file.name;
    });
  }

  Future<void> _openDemo(String path) async {
    final data = await rootBundle.load(path);

    setState(() {
      _bytes = data.buffer.asUint8List();
      _fileName = path.split('/').last;
    });
  }

  @override
  Widget build(BuildContext context) {
    final bytes = _bytes;
    final fileName = _fileName;

    return Scaffold(
      appBar: AppBar(
        title: const Text('File Preview'),
        actions: [
          IconButton(
            onPressed: _pickFile,
            icon: const Icon(Icons.folder_open),
            tooltip: 'Open file',
          ),
        ],
      ),
      body: bytes == null
          ? _FileActions(onPickFile: _pickFile, onOpenDemo: _openDemo)
          : FilePreviewView(
              source: PreviewSource.bytes(bytes, fileName: fileName),
            ),
    );
  }
}

class _FileActions extends StatelessWidget {
  const _FileActions({required this.onPickFile, required this.onOpenDemo});

  final VoidCallback onPickFile;
  final ValueChanged<String> onOpenDemo;

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          ElevatedButton.icon(
            onPressed: onPickFile,
            icon: const Icon(Icons.folder_open),
            label: const Text('Choose XLSX, CSV, or DOCX file'),
          ),
          const SizedBox(height: 16),
          for (final demo in _demoFiles)
            Padding(
              padding: const EdgeInsets.only(bottom: 8),
              child: OutlinedButton(
                onPressed: () => onOpenDemo(demo.path),
                child: Text(demo.label),
              ),
            ),
        ],
      ),
    );
  }
}

class _DemoFile {
  const _DemoFile({required this.label, required this.path});

  final String label;
  final String path;
}

const _demoFiles = [
  _DemoFile(
    label: 'Open project management demo',
    path: 'assets/Project-Management-Sample-Data.xlsx',
  ),
  _DemoFile(
    label: 'Open large XLSX demo',
    path: 'assets/file_example_XLSX_5000.xlsx',
  ),
  _DemoFile(label: 'Open DOCX demo', path: 'assets/file-sample_1MB.docx'),
];
2
likes
160
points
63
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Flutter widgets and parsers for readable XLSX, CSV, and DOCX previews.

Repository (GitHub)
View/report issues

Topics

#flutter #file-preview #xlsx #csv #docx

License

MIT (license)

Dependencies

archive, csv, flutter, xml

More

Packages that depend on file_preview_kit