// Copyright 2013 The Flutter Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // ignore_for_file: public_member_api_docs import 'package:flutter/material.dart'; import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Path Provider', theme: ThemeData(primarySwatch: Colors.blue), home: const MyHomePage(title: 'Path Provider'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { final PathProviderPlatform provider = PathProviderPlatform.instance; Future? _tempDirectory; Future? _appSupportDirectory; Future? _appDocumentsDirectory; Future? _appCacheDirectory; Future? _externalDocumentsDirectory; Future? _externalDownloadsDirectory; Future?>? _externalStorageDirectories; Future?>? _externalCacheDirectories; void _requestTempDirectory() { setState(() { _tempDirectory = provider.getTemporaryPath(); }); } Widget _buildDirectory( BuildContext context, AsyncSnapshot snapshot, ) { var text = const Text(''); if (snapshot.connectionState == ConnectionState.done) { if (snapshot.hasError) { text = Text('Error: ${snapshot.error}'); } else if (snapshot.hasData) { text = Text('path: ${snapshot.data}'); } else { text = const Text('path unavailable'); } } return Padding(padding: const EdgeInsets.all(16.0), child: text); } Widget _buildDirectories( BuildContext context, AsyncSnapshot?> snapshot, ) { var text = const Text(''); if (snapshot.connectionState == ConnectionState.done) { if (snapshot.hasError) { text = Text('Error: ${snapshot.error}'); } else if (snapshot.hasData) { final String combined = snapshot.data!.join(', '); text = Text('paths: $combined'); } else { text = const Text('path unavailable'); } } return Padding(padding: const EdgeInsets.all(16.0), child: text); } void _requestAppDocumentsDirectory() { setState(() { _appDocumentsDirectory = provider.getApplicationDocumentsPath(); }); } void _requestAppSupportDirectory() { setState(() { _appSupportDirectory = provider.getApplicationSupportPath(); }); } void _requestAppCacheDirectory() { setState(() { _appCacheDirectory = provider.getApplicationCachePath(); }); } void _requestExternalStorageDirectory() { setState(() { _externalDocumentsDirectory = provider.getExternalStoragePath(); }); } void _requestExternalStorageDirectories(StorageDirectory type) { setState(() { _externalStorageDirectories = provider.getExternalStoragePaths( type: type, ); }); } void _requestExternalCacheDirectories() { setState(() { _externalCacheDirectories = provider.getExternalCachePaths(); }); } void _requestDownloadsDirectory() { setState(() { _externalDownloadsDirectory = provider.getDownloadsPath(); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(widget.title)), body: Center( child: ListView( children: [ Padding( padding: const EdgeInsets.all(16.0), child: ElevatedButton( onPressed: _requestTempDirectory, child: const Text('Get Temporary Directory'), ), ), FutureBuilder( future: _tempDirectory, builder: _buildDirectory, ), Padding( padding: const EdgeInsets.all(16.0), child: ElevatedButton( onPressed: _requestAppDocumentsDirectory, child: const Text('Get Application Documents Directory'), ), ), FutureBuilder( future: _appDocumentsDirectory, builder: _buildDirectory, ), Padding( padding: const EdgeInsets.all(16.0), child: ElevatedButton( onPressed: _requestAppSupportDirectory, child: const Text('Get Application Support Directory'), ), ), FutureBuilder( future: _appSupportDirectory, builder: _buildDirectory, ), Padding( padding: const EdgeInsets.all(16.0), child: ElevatedButton( onPressed: _requestAppCacheDirectory, child: const Text('Get Application Cache Directory'), ), ), FutureBuilder( future: _appCacheDirectory, builder: _buildDirectory, ), Padding( padding: const EdgeInsets.all(16.0), child: ElevatedButton( onPressed: _requestExternalStorageDirectory, child: const Text('Get External Storage Directory'), ), ), FutureBuilder( future: _externalDocumentsDirectory, builder: _buildDirectory, ), Column( children: [ Padding( padding: const EdgeInsets.all(16.0), child: ElevatedButton( child: const Text('Get External Storage Directories'), onPressed: () { _requestExternalStorageDirectories( StorageDirectory.music, ); }, ), ), ], ), FutureBuilder?>( future: _externalStorageDirectories, builder: _buildDirectories, ), Column( children: [ Padding( padding: const EdgeInsets.all(16.0), child: ElevatedButton( onPressed: _requestExternalCacheDirectories, child: const Text('Get External Cache Directories'), ), ), ], ), FutureBuilder?>( future: _externalCacheDirectories, builder: _buildDirectories, ), Padding( padding: const EdgeInsets.all(16.0), child: ElevatedButton( onPressed: _requestDownloadsDirectory, child: const Text('Get Downloads Directory'), ), ), FutureBuilder( future: _externalDownloadsDirectory, builder: _buildDirectory, ), ], ), ), ); } }