Flutterで簡単にファイルを保存する
file_saverというパッケージを使うと、簡単にファイルを保存することができる。
Webではダウンロード先を選択できるが、iOS, Androidではアプリ内のフォルダに強制的に保存されるので注意。※Webアプリの場合、debugだと直接ダウンロードフォルダに保存されるが、リリースするとダウンロード先を選択できた。
The plugin is pretty simple and saves the file in Downloads folder in Windows, MacOS, Linux and directly downloads the file in Web, in iOS, the file is Saved in Application Documents Directory, and in Android it is saved in the applications files directory Android/data/your.package.name/file/your_file.extension. https://pub.dev/packages/file_saver
import文
import 'package:file_saver/file_saver.dart';
ファイルを保存するコード
await FileSaver.instance.saveFile(String name, Uint8List bytes, String ext, mimeType: MimeType);
nameはファイル名、bytesは実際のファイル(Uint8List形式)、extは拡張子を入力する。
mimeTypeの指定は必須ではないが、Webで使うなら指定したほうがいいっぽい(指定しないと拡張子が表示されない?かも。ちゃんと検証していないので確証はない)。
指定できるMimeTypeは以下のページを参照。
実際に使ったコード
CSVを保存するコード。
String csv = const ListToCsvConverter().convert(_qaList);
Uint8List bytes = const Utf8Encoder().convert(csv);
await FileSaver.instance.saveFile(widget.title, bytes, 'csv', mimeType: MimeType.CSV);
ListToCsvConverter().convertは以下のcsvのパッケージを使ったやつ。
Uint8Listを使うには、import 'dart:typed_data';
が必要。Utf8Encoder().convertを使うには、
import 'dart:convert';
が必要。widget.title
となっているやつは、遷移前の画面から持ってきたString値。
保存先を示す
Webでは保存先を選択できるが、iOSやAndroidでは保存先を選択できないため、ユーザーに保存先を表示したい。
そこで、Snackbarを使って保存先を表示するよう、コードを以下のように修正した。
String csv = const ListToCsvConverter().convert(_qaList);
Uint8List bytes = const Utf8Encoder().convert(csv);
String path = await FileSaver.instance
.saveFile(widget.title, bytes, 'csv', mimeType: MimeType.CSV);
if (!kIsWeb) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text('$pathに保存されました'),
));
}
使ったアプリ
Author And Source
この問題について(Flutterで簡単にファイルを保存する), 我々は、より多くの情報をここで見つけました https://zenn.dev/enoiu/articles/34117d80def02a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol