Productivity
A customizable file saver and file picker package that simplifies browsing folders, saving files, and picking files in Android.
Add the following to your pubspec.yaml
:
dependencies:
filesaverz: ^3.1.0
Then, add the required permission in your AndroidManifest.xml
.
If you encounter a MissingPluginException
error (No implementation found for method checkPermissionStatus on channel flutter.baseflow.com/permissions/methods), try fixing it by adding the following to your app/build.gradle
:
buildTypes {
release {
shrinkResources false
minifyEnabled false
signingConfig signingConfigs.release
}
}
Import the filesaverz
package:
import 'package:filesaverz/filesaverz.dart';
First, set up the FileSaver
widget like this:
FileSaver fileSaver = FileSaver(
fileTypes: const ['txt', 'pdf'],
initialFileName: 'Untitled File',
);
Or use a customizable FileSaver
like this:
FileSaver fileSaver = FileSaver.builder(
fileTypes: const ['txt', 'pdf'],
initialFileName: 'Untitled File',
headerBuilder: (context, state) => /* Your Widget */,
bodyBuilder: (context, state) => /* Your Widget */,
footerBuilder: (context, state) => /* Your Widget */,
);
Then, in an asynchronous function, use the following:
String? path = await fileSaver.getPath(context);
fileSaver.writeAsBytes(bytes, context: context);
fileSaver.writeAsBytesSync(bytes, context: context);
fileSaver.writeAsString(contents, context: context);
fileSaver.writeAsStringSync(contents, context: context);
File? file = await fileSaver.pickFile(context);
List<File>? files = await fileSaver.pickFiles(context);
headerBuilder
An optional builder:
(context, state) {
return Text('My Custom Header Widget');
}
bodyBuilder
An optional builder:
(context, state) {
return Text('My Custom Body Widget');
}
footerBuilder
An optional builder:
(context, state) {
return Text('My Custom Footer Widget');
}
style
Set custom color, text style, icon, and displayed text:
FileSaverStyle(
primaryColor: Colors.blue,
secondaryColor: Colors.white,
primaryTextStyle: TextStyle(),
secondaryTextStyle: TextStyle(),
icons: [
FileSaverIcon(icon: (path) => Icon(Icons.default)),
FileSaverIcon.directory(icon: (path) => Icon(Icons.folder)),
FileSaverIcon.file(fileType: 'jpg', icon: (path) => Image.file(File(path))),
],
text: FileSaverText(
popupNo: 'Nay',
popupYes: 'Sí',
),
)
initialFileName
This property is used when you call the saving method: