まー、ありますわね。そーゆーのがね。
要件としては、写真撮ってメモを追加して何件かリストにして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
は型のFuture返すから、頑張れば取れる可能性も微レ存。flutterの仕様的に。
github.com
あ、あとこのライブラリでやると、画像がギャラリーに保存できなかった。issueも上がってる。
pub.dev
こんだけのコードなんだけどね。多分MethodChannelの使い方が間違っているのだろう。
import 'dart:async';
import 'dart:typed_data';
import 'package:flutter/services.dart';
class ImageGallerySaver {
static const MethodChannel _channel =
const MethodChannel('image_gallery_saver');
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;
}
[file]
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
そんなかんじ。