path_provider_master 1.0.0 copy "path_provider_master: ^1.0.0" to clipboard
path_provider_master: ^1.0.0 copied to clipboard

Flutter plugin for accessing various system paths across all platforms with support for public paths

example/lib/main.dart

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:path_provider_master/path_provider_master.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Path Provider Master - Web Example',
      theme: ThemeData(primarySwatch: Colors.blue, useMaterial3: true),
      home: const Home(),
    );
  }
}

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

  @override
  State<Home> createState() => _HomeState();
}

class _HomeState extends State<Home> {
  final Map<String, String?> _paths = {};
  bool _isLoading = false;

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

  Future<void> _loadAllPaths() async {
    setState(() {
      _isLoading = true;
    });

    final paths = <String, Future<Directory?> Function()>{
      'Temporary Directory': PathProviderMaster.getTemporaryDirectory,
      'Application Support': PathProviderMaster.getApplicationSupportDirectory,
      'Library Directory': PathProviderMaster.getLibraryDirectory,
      'Application Documents':
          PathProviderMaster.getApplicationDocumentsDirectory,
      'External Storage': PathProviderMaster.getExternalStorageDirectory,
      'Downloads Directory': PathProviderMaster.getDownloadsDirectory,
      'Public Pictures': PathProviderMaster.getPublicPicturesDirectory,
      'Public Videos': PathProviderMaster.getPublicVideosDirectory,
      'Public Music': PathProviderMaster.getPublicMusicDirectory,
      'Public Downloads': PathProviderMaster.getPublicDownloadsDirectory,
      'Public Documents': PathProviderMaster.getPublicDocumentsDirectory,
      'Public DCIM': PathProviderMaster.getPublicDCIMDirectory,
    };

    for (var entry in paths.entries) {
      try {
        final dir = await entry.value();
        _paths[entry.key] = dir?.path ?? 'غیرقابل دسترس';
      } catch (e) {
        _paths[entry.key] = 'خطا: $e';
      }
    }

    // دریافت لیست دایرکتوری‌های کش خارجی
    try {
      final cacheDirs = await PathProviderMaster.getExternalCacheDirectories();
      if (cacheDirs != null && cacheDirs.isNotEmpty) {
        for (int i = 0; i < cacheDirs.length; i++) {
          _paths['External Cache $i'] = cacheDirs[i].path;
        }
      } else {
        _paths['External Cache Directories'] = 'غیرقابل دسترس';
      }
    } catch (e) {
      _paths['External Cache Directories'] = 'خطا: $e';
    }

    // دریافت لیست دایرکتوری‌های حافظه خارجی
    try {
      final storageDirs =
          await PathProviderMaster.getExternalStorageDirectories();
      if (storageDirs != null && storageDirs.isNotEmpty) {
        for (int i = 0; i < storageDirs.length; i++) {
          _paths['External Storage $i'] = storageDirs[i].path;
        }
      } else {
        _paths['External Storage Directories'] = 'غیرقابل دسترس';
      }
    } catch (e) {
      _paths['External Storage Directories'] = 'خطا: $e';
    }

    setState(() {
      _isLoading = false;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Path Provider Master - نمونه'),
          centerTitle: true,
          backgroundColor: Colors.blue,
        ),
        body: _isLoading
            ? const Center(child: CircularProgressIndicator())
            : RefreshIndicator(
                onRefresh: _loadAllPaths,
                child: ListView.builder(
                  padding: const EdgeInsets.all(16),
                  itemCount: _paths.length,
                  itemBuilder: (context, index) {
                    final entry = _paths.entries.elementAt(index);
                    return Card(
                      margin: const EdgeInsets.only(bottom: 12),
                      elevation: 2,
                      child: ListTile(
                        title: Text(
                          entry.key,
                          style: const TextStyle(
                            fontWeight: FontWeight.bold,
                            fontSize: 16,
                          ),
                        ),
                        subtitle: Padding(
                          padding: const EdgeInsets.only(top: 8),
                          child: Text(
                            entry.value ?? 'در حال بارگذاری...',
                            style: TextStyle(
                              fontSize: 13,
                              color: entry.value == 'غیرقابل دسترس'
                                  ? Colors.red
                                  : Colors.black87,
                            ),
                          ),
                        ),
                        leading: Icon(
                          _getIconForPath(entry.key),
                          color: Colors.blue,
                          size: 32,
                        ),
                        trailing:
                            entry.value != null &&
                                entry.value != 'غیرقابل دسترس' &&
                                !entry.value!.startsWith('خطا')
                            ? IconButton(
                                icon: const Icon(Icons.copy, size: 20),
                                onPressed: () {
                                  // کپی مسیر به کلیپ‌بورد
                                  ScaffoldMessenger.of(context).showSnackBar(
                                    SnackBar(
                                      content: Text(
                                        'مسیر کپی شد: ${entry.value}',
                                      ),
                                      duration: const Duration(seconds: 2),
                                    ),
                                  );
                                },
                              )
                            : null,
                      ),
                    );
                  },
                ),
              ),
        floatingActionButton: FloatingActionButton(
          onPressed: _loadAllPaths,
          tooltip: 'بارگذاری مجدد',
          child: const Icon(Icons.refresh),
        ),
      ),
    );
  }

  IconData _getIconForPath(String pathName) {
    if (pathName.contains('Pictures') || pathName.contains('DCIM')) {
      return Icons.photo_library;
    } else if (pathName.contains('Videos')) {
      return Icons.video_library;
    } else if (pathName.contains('Music')) {
      return Icons.music_note;
    } else if (pathName.contains('Downloads')) {
      return Icons.download;
    } else if (pathName.contains('Documents')) {
      return Icons.description;
    } else if (pathName.contains('Temporary') || pathName.contains('Cache')) {
      return Icons.cached;
    } else if (pathName.contains('External')) {
      return Icons.sd_storage;
    } else {
      return Icons.folder;
    }
  }
}
2
likes
150
points
107
downloads

Documentation

API reference

Publisher

verified publisherswanflutterdev.com

Weekly Downloads

Flutter plugin for accessing various system paths across all platforms with support for public paths

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, flutter_web_plugins, plugin_platform_interface, web

More

Packages that depend on path_provider_master

Packages that implement path_provider_master