How to save a file locally with Flutter(Image, Text)
In this tutorial you will learn how you can save a file locally. Flutter has a built in type called File which will allow us to read and write to a file locally. To make our lives easier we do need to add a package, the path_provider package, which you can find here.
The path_provider package is used for "finding commonly used locations on the filesystem".
Before we get started, be sure to add the following to your pubspec.yaml under dependencies:
path_provider: ^1.6.14Once you have added that to your pubspec, you can run flutter pub get, after that has completed remember to import the following where ever it is required:
import 'package:path_provider/path_provider.dart';
import 'dart:io';Step 1: Get the commonly used file path
The first thing that we need to do is to write a function that will return the path to the file that we want to save to. In this example I will be using a hardcoded file name, demoTextFile.txt but you can update this to whatever you want.
Below the is the code to retrieve the file path:
Future<String> getFilePath() async {
Directory appDocumentsDirectory = await getApplicationDocumentsDirectory(); // 1
String appDocumentsPath = appDocumentsDirectory.path; // 2
String filePath = '$appDocumentsPath/demoTextFile.txt'; // 3
return filePath;
}- We call
getApplicationDocumentsDirectory. This comes from thepath_providerpackage that we installed earlier. This will get whatever the common documents directory is for the platform that we are using. - Get the path to the documents directory as a
String - Create the full file path as a
String.
Step 2: Write content and save the file
Now that we have the getFilePath function written, we can use that to create a new instance of File and then use that to write some text to the file.
To do this we need to add the following saveFile function:
void saveFile() async {
File file = File(await getFilePath()); // 1
file.writeAsString("This is my demo text that will be saved to : demoTextFile.txt"); // 2
}- Initialise
Filewith the file path that gets returned by thegetFilePathfunction. - We write and save to the file.
Filehas a built in function calledwriteAsStringthat will allow us to write aStringto the file.
Step 3: Read the file
Now that we have written to the file, let's see if it worked as expected. Add the following readFile function to your code:
void readFile() async {
File file = File(await getFilePath()); // 1
String fileContent = await file.readAsString(); // 2
print('File Content: $fileContent');
}- Once again we initialise
Filewith the file path that we used before. - Previously we used the
writeAsStringfunction that is built in toFile, but now we can use thereadAsStringfunction that is also built in toFile.
Lastly we print the contents of the file that we read from.
Conclusion
Saving to file locally is very easy with Flutter, as long as you can create an instance of file you can write the data.
The full source code for this project can be found here.