まー、ありますわね。そーゆーのがね。
要件としては、写真撮ってメモを追加して何件かリストにしてPOSTだから、取った写真をリスト表示できることが必要。これが意外と難しくてワロタ。
最終的に、こういう風にするしかなさげ。
image_picker
プラグインで画像をカメラでとって、path_provider
にて、application内のディレクトリに保存してパスを持っておく- ギャラリーに移す場合は、
gallary_saver
でファイルをコピーする。 image_gallay_saver
はバグがあって動かないようだ。
まとめ
ギャラリーに直接保存してしまうと、保存先のファイルパスが取れない。戻り値がboolになるのは、gallary_saverの仕様。
Future<bool> takePhoto() async { final ImagePicker picker = ImagePicker(); final PickedFile _image = await picker.getImage(source: ImageSource.camera); return GallerySaver.saveImage(_image.path) }
true/falseより、保存先のパスが一番欲しいよねw issueに上がってるけど、できないのかな。FlutterのMethodChannel#invokeMethod
は
あ、あとこのライブラリでやると、画像がギャラリーに保存できなかった。issueも上がってる。
こんだけのコードなんだけどね。多分MethodChannelの使い方が間違っているのだろう。
import 'dart:async'; import 'dart:typed_data'; import 'package:flutter/services.dart'; class ImageGallerySaver { static const MethodChannel _channel = const MethodChannel('image_gallery_saver'); /// save image to Gallery /// imageBytes can't null static Future saveImage(Uint8List imageBytes, {int quality = 80, String name}) async { assert(imageBytes != null); final result = await _channel.invokeMethod('saveImageToGallery', <String, dynamic> { 'imageBytes': imageBytes, 'quality': quality, 'name': name }); return result; } /// Save the PNG,JPG,JPEG image or video located at [file] to the local device media gallery. static Future saveFile(String file) async { assert(file != null); final result = await _channel.invokeMethod('saveFileToGallery', file); return result; } }
image_gallery_saver/image_gallery_saver.dart at master · hui-z/image_gallery_saver · GitHub
そんなかんじ。