大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

Flutterで画像共有 shareXFiles

著者:津路高広
公開日:2023/01/30
最終更新日:2023/01/30
カテゴリー:技術情報
タグ:

津路です。

Flutter Share.sharefiles deprecated shareXFilesエラーでは、シミュレータではエラーが出ませんでした。

さて、実機iPhone6(iOS12.5.4)で実行すると、PlatformExceptionが発生します。ソースコードを追ってみると、
shareFilesWithResult関数でエラーが起きています。関数の引数は、以下です。

    List<String> paths, {
    List<String>? mimeTypes,
    String? subject,
    String? text,
    Rect? sharePositionOrigin,

この中のsharePositionOriginが0だよと言ってます。

  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とするのかな?と。

final box = context.findRenderObject() as RenderBox?;
Rect rect = box!.localToGlobal(Offset.zero) & box.size;
await Share.shareXFiles(files,
                          text: '私のプロフィールです', sharePositionOrigin: rect);

実際に引数として渡すと、正常にシェア機能を使えました。

    次の記事 :
    上に戻る