始めに
Flutterで個人開発のアプリを作っているのですが、その機能の中にPDFをアップロードするという機能がありまして、そのためにどうやってFlutterからPDFを取得できるのかを調べたので、メモがわりに書きました。
ありがたいことにfile_pickerのというパッケージを使うとめっちゃ簡単に実装することができました
環境
Dart: 2.9.1
Flutter: 1.20.2
file_picker: 2.0.9+1
実装
Future<File> getPdfFile() async {
FilePickerResult result = await FilePicker.platform.pickFiles();
if (result != null) {
File file = File(result.files.single.path);
return file;
} else {
throw Exception('can not pick file');
}
}
実装自体はパッケージから関数を呼ぶだけなのですが、今回はPDFだけを取得したいので引数に色々渡す必要があります
それらを渡したのが次のコード
Future<File> getPdfFile() async {
FilePickerResult result = await FilePicker.platform.pickFiles(
type: FileType.custom, // ←引数を追加
allowedExtensions: ['pdf'], // ←引数を追加
);
if (result != null) {
File file = File(result.files.single.path);
return file;
} else {
throw Exception('can not pick file');
}
}
引数のtype
でファイルのタイプでcustom
を指定する
第二引数のallowedExtensions
で選択したいファイルの拡張子を配列で渡す(今回の場合は.pdfのみだが、.pngや.docを追加できたりもする)
そうすることによってPDFのファイルが取得できるので、後は好きな形に変形して終わりです
iOSの設定
今回はiOSの方でしか動作確認をしてないので、Androidでは動かない可能性があります。。。
XcodeでCapabilityを追加
XcodeでTARGETSの「Signing & Capability」の左上のCapabilityのプラスボタンを選択。
そこから「iCloud」を追加
TARGETSの「Signing & Capability」に「iCloud」の項目が追加されていることを確認します。
iCloud項目の中のServices項目で
- Key-value storage
- iCloud Documents
- CloudKit
とある中で「iCloud Documents」だけにチェックを入れる。
Services項目の下にあるContainers項目に自分のアプリのBundle IDのContainerを作成
ここら辺の設定はこちらの記事を参考にさせていただきました