save_to_dir 0.0.1 copy "save_to_dir: ^0.0.1" to clipboard
save_to_dir: ^0.0.1 copied to clipboard

PlatformAndroid

A Flutter plugin that provides functionality to save files to a specified directory on the device. It supports downloading files from a URL and saving them to the device's storage, with progress track [...]

SaveToDir Plugin #

The SaveToDir plugin provides functionality to save files to a specified directory on the device and download files from a URL with progress tracking and notifications. This plugin is designed to work seamlessly with Android and can be extended to support other platforms in the future.

Features #

  • Save files to the device's storage.
  • Download files from a URL with progress tracking.
  • Show notifications for download progress and completion.
  • Request storage permissions dynamically.

Installation #

To use the SaveToDir plugin, add it to your pubspec.yaml file:

dependencies:
  save_to_dir:

Usage #

To use the plugin, import it into your Dart code:

import 'package:save_to_dir/save_to_dir.dart';

Save a File #

You can save a file to the device's storage using the saveToDir method:

final saveToDir = SaveToDir();

Uint8List fileBytes = Uint8List.fromList([0, 1, 2, 3, 4, 5]); // Example data
String fileName = 'example_file.txt';
String mimeType = 'text/plain';

String? result = await saveToDir.saveToDir(
  fileBytes,
  fileName: fileName,
  mimeType: mimeType,
);

print(result ?? 'File saved successfully!');

Download a File #

You can download a file from a URL using the downloadFromUrl method with progress tracking:

final saveToDir = SaveToDir();

String url = 'https://example.com/sample.pdf';
String fileName = 'sample.pdf';

await saveToDir.downloadFromUrl(
  url,
  fileName: fileName,
  onProgressCallback: (downloadedBytes, totalBytes) {
    double progress = downloadedBytes / totalBytes;
    print('Download progress: ${(progress * 100).toStringAsFixed(2)}%');
  },
  onCompleteCallback: (uri) {
    print('Download complete: $uri');
  },
  onErrorCallback: (error) {
    print('Download failed: $error');
  },
);

Request Storage Permission #

You can request storage permissions dynamically:

bool? hasPermission = await saveToDir.requestStoragePermission();
if (hasPermission == true) {
  print('Storage permission granted');
} else {
  print('Storage permission denied');
}

Open Storage Settings #

You can open the device's storage settings:

await saveToDir.openStorageSettings();

Example #

Here is a complete example of how to use the SaveToDir plugin:

import 'package:flutter/material.dart';
import 'dart:typed_data';
import 'package:save_to_dir/save_to_dir.dart';

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

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

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

class _MyAppState extends State<MyApp> {
  final _saveToDirPlugin = SaveToDir();
  String _downloadStatus = 'Idle';
  double _downloadProgress = 0.0;

  Future<void> saveFile() async {
    Uint8List fileBytes = Uint8List.fromList([0, 1, 2, 3, 4, 5]);
    String fileName = 'example_file.txt';
    String mimeType = 'text/plain';

    String? result = await _saveToDirPlugin.saveToDir(
      fileBytes,
      fileName: fileName,
      mimeType: mimeType,
    );

    print(result ?? 'File saved successfully!');
  }

  Future<void> downloadFile() async {
    String url = 'https://example.com/sample.pdf';
    String fileName = 'sample.pdf';

    setState(() {
      _downloadStatus = 'Downloading...';
      _downloadProgress = 0.0;
    });

    await _saveToDirPlugin.downloadFromUrl(
      url,
      fileName: fileName,
      onProgressCallback: (downloadedBytes, totalBytes) {
        setState(() {
          _downloadProgress = downloadedBytes / totalBytes;
        });
      },
      onCompleteCallback: (uri) {
        setState(() {
          _downloadStatus = 'Download complete: $uri';
        });
      },
      onErrorCallback: (error) {
        setState(() {
          _downloadStatus = 'Download failed: $error';
        });
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('SaveToDir Plugin Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: saveFile,
                child: const Text('Save File'),
              ),
              const SizedBox(height: 16),
              ElevatedButton(
                onPressed: downloadFile,
                child: const Text('Download File'),
              ),
              const SizedBox(height: 16),
              LinearProgressIndicator(
                value: _downloadProgress,
                minHeight: 10,
              ),
              const SizedBox(height: 8),
              Text(_downloadStatus),
            ],
          ),
        ),
      ),
    );
  }
}

Contributing #

Contributions are welcome! If you encounter any issues or have feature requests, feel free to open an issue or submit a pull request on GitHub.

License #

This project is licensed under the MIT License. See the LICENSE file for more details.

2
likes
150
points
19
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin that provides functionality to save files to a specified directory on the device. It supports downloading files from a URL and saving them to the device's storage, with progress tracking and notifications. This plugin is designed to work seamlessly with Android and can be extended to support other platforms in the future.

Repository (GitHub)
View/report issues

Topics

#downloadfile #savefile #mediastore #saf #openfolder

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on save_to_dir

Packages that implement save_to_dir