dynamic_storage_directory

A Flutter package that provides a clean way to handle storage directory path on both web and non-web platforms and debug and release builds.

Features

  • Automatic platform detection (web vs non-web)
  • Different storage paths for debug and release builds
  • Debug storage in project directory for easy access during development
  • Declaration by developer of web storage directory
  • Declaration by developer of release storage directory
  • Cross-platform support (Android, iOS, Windows, macOS, Linux, Web)

Getting started

Add this to your package's pubspec.yaml file:

dependencies:
  dynamic_storage_directory: ^1.0.0

Usage

The package provides a simple way to get the appropriate storage directory based on your platform and build mode:

import 'package:dynamic_storage_directory/dynamic_storage_directory.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Get the storage directory
  final storageDir = await getStorageDirectory(
    webStorageDirectory: Directory('your_web_storage_path'),
    releaseStorageDirectory: getApplicationSupportDirectory(), // Or any other directory
  );

  // Use the directory
  print('Storage directory: ${storageDir.path}');
}

With Hydrated Bloc

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Initialize Hydrated Bloc Storage dynamically
  HydratedBloc.storage = await HydratedStorage.build(
    storageDirectory: await getStorageDirectory(
      webStorageDirectory: HydratedStorage.webStorageDirectory,
      releaseStorageDirectory: getApplicationSupportDirectory(),
    ),
  );

  runApp(const MyApp());
}

Storage Directory Behavior

  • Web Platform: Uses the provided webStorageDirectory
  • Debug Mode: Creates a clearly marked debug folder in your project directory
  • Release Mode: Uses the provided releaseStorageDirectory

Additional information

This package is particularly useful when:

  • You need different storage locations for web and native platforms
  • You want to easily access stored data during development
  • You're using packages like hydrated_bloc that require different storage handling for web

Contributing

Feel free to file issues, PRs, or suggestions on the GitHub repository.

License

MIT License - see LICENSE file for details