Flutterで画像共有 shareXFiles
津路です。
Flutter Share.sharefiles deprecated shareXFilesエラーでは、シミュレータではエラーが出ませんでした。
さて、実機iPhone6(iOS12.5.4)で実行すると、PlatformExceptionが発生します。ソースコードを追ってみると、
shareFilesWithResult関数でエラーが起きています。関数の引数は、以下です。
1 2 3 4 5 | List<String> paths, { List<String>? mimeTypes, String? subject, String? text, Rect? sharePositionOrigin, |
この中のsharePositionOriginが0だよと言ってます。
1 2 3 4 5 | static Future<ShareResult> shareXFiles( List<XFile> files, { String? subject, String? text, Rect? sharePositionOrigin, |
がshareXFilesの引数で、
私は、この引数を与えていないのが原因のようです。
そこで、share_plusパッケージのReadmeをみてみると、iPadの項目なんですが、
share_plus requires iPad users to provide the sharePositionOrigin parameter.
と記載されています。
この引数の例として、sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size
が記載されています。boxは、
final box = context.findRenderObject() as RenderBox?;
ここで、難しいクラスが出てきます。RenderObjectです。
api.flutter.devのページによると、Widgetのレンダリングに関わる基礎のクラスのようです。
これのオブジェクトを取得して、グローバル座標に変換して、box.sizeと演算子&でRectインスタンスを生成し、sharePositionOriginとするのかな?と。
1 2 3 4 | final box = context.findRenderObject() as RenderBox?; Rect rect = box!.localToGlobal(Offset.zero) & box.size; await Share.shareXFiles(files, text: '私のプロフィールです', sharePositionOrigin: rect); |
実際に引数として渡すと、正常にシェア機能を使えました。