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;
    }
  }
}
1
likes
160
points
--
downloads

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

Documentation

API reference

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