large_file_handler 0.3.0 copy "large_file_handler: ^0.3.0" to clipboard
large_file_handler: ^0.3.0 copied to clipboard

The Large File Handler Plugin designed to efficiently work with large files, for example allows you to download large files from network or copy files from the Flutter app's assets to the device's loc [...]

example/lib/main.dart

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:large_file_handler/large_file_handler.dart';

void main() {
  runApp(const MaterialApp(
    home: MyApp(),
  ));
}

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _statusMessage = 'Preparing to copy asset...';
  StreamSubscription<int>? _progressSubscription;

  @override
  void initState() {
    super.initState();
    checkAndCopyAsset();
  }

  Future<void> checkAndCopyAsset() async {
    const assetName = 'example.json';
    const targetPath = 'example.json';

    // Check if the file already exists
    bool fileExists = await LargeFileHandler().fileExists(targetPath: targetPath);

    if (fileExists) {
      // If file exists, show dialog asking if it should be overwritten
      bool? shouldOverwrite = await showDialog<bool>(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: const Text('File Already Exists'),
            content: const Text(
                'The file already exists at the target path. Do you want to overwrite it?'),
            actions: <Widget>[
              TextButton(
                onPressed: () => Navigator.of(context).pop(false), // Do not overwrite
                child: const Text('No'),
              ),
              TextButton(
                onPressed: () => Navigator.of(context).pop(true), // Overwrite
                child: const Text('Yes'),
              ),
            ],
          );
        },
      );

      if (shouldOverwrite == false || shouldOverwrite == null) {
        setState(() {
          _statusMessage = 'Operation cancelled, file already exists.';
        });
        return; // Stop operation if the user declined to overwrite the file
      }
    }

    // If file doesn't exist or the user agrees to overwrite, proceed with the copying
    copyAssetToLocalWithProgress(assetName: assetName, targetPath: targetPath);
  }

  Future<void> copyAssetToLocalWithProgress(
      {required String assetName, required String targetPath}) async {
    try {
      Stream<int> progressStream = LargeFileHandler().copyAssetToLocalStorageWithProgress(
        assetName: assetName,
        targetPath: targetPath,
      );

      _progressSubscription = progressStream.listen(
        (progress) {
          setState(() {
            _statusMessage = 'Copying asset... $progress%';
          });
        },
        onDone: () {
          setState(() {
            _statusMessage = 'File copied successfully to $targetPath';
          });
        },
        onError: (error) {
          setState(() {
            _statusMessage = 'Failed to copy asset: $error';
          });
        },
      );
    } on PlatformException catch (e) {
      setState(() {
        _statusMessage = 'Failed to copy asset: ${e.message}';
      });
    }
  }

  @override
  void dispose() {
    _progressSubscription?.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Plugin Example App'),
      ),
      body: Center(
        child: Text(_statusMessage),
      ),
    );
  }
}
3
likes
130
points
129
downloads

Publisher

unverified uploader

Weekly Downloads

The Large File Handler Plugin designed to efficiently work with large files, for example allows you to download large files from network or copy files from the Flutter app's assets to the device's local file system. This is useful when you need to access large files at native part in your plugins

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, path_provider, plugin_platform_interface

More

Packages that depend on large_file_handler