5

現在、FCM とローカル通知を Flutter アプリに実装しようとしています。通常の通知用に FCM とローカル通知を正常に構成しましたが、画像と共に表示したい別の種類の通知もあります。アプリがフォアグラウンドにある場合、通知はエラーなしで表示されますが、終了するとアプリ/バックグラウンドに移動パスプロバイダーを使用して画像を保存しようとすると例外が発生します。

例外:

MissingPluginException(No implementation found for method getApplicationDocumentsDirectory on channel plugins.flutter.io/path_provider)

アプリがフォアグラウンドにないときにパス プロバイダー メソッド チャネルが閉じているため、このエラーが発生していると思います。これを修正するためにできることはありますか? または、flutter_local_notificationsプラグインがビットマップへのファイルパスを必要としない場合、画像を保存して、バックグラウンドで動作する別の方法でパスを取得できますか (パスプロバイダーなし)? (実際に表示したいのは、次のようなリンクからの画像です: https://is1-ssl.mzstatic.com/image/thumb/WNUBiv2P6YSklHn9eA5nlg/1000x1000bb.jpeg )

画像の保存:

 static Future<String> saveImage(Image image) {
    final completer = Completer<String>();
    image.image.resolve(ImageConfiguration()).addListener(ImageStreamListener((imageInfo,_) async {
      final byteData = await imageInfo.image.toByteData(format: ImageByteFormat.png);
      final pngBytes = byteData.buffer.asUint8List();
      final fileName = pngBytes.hashCode;
      final directory = await getApplicationDocumentsDirectory();
      final filePath = '${directory.path}/$fileName';
      final file = File(filePath);
      await file.writeAsBytes(pngBytes);
      completer.complete(filePath);
    }));
    return completer.future;
  }
4

2 に答える 2

4

Application.java にもパス プロバイダーを登録する必要があります。

import io.flutter.plugins.pathprovider.PathProviderPlugin;

...

    @Override
    public void registerWith(PluginRegistry registry) {
PathProviderPlugin.registerWith(registry.registrarFor("io.flutter.plugins.pathprovider.PathProviderPlugin"));
    }

flutter が Android 側のデフォルト言語として Kotlin を使用するようになったので、Kotlin コードを次に示します。

override fun registerWith(registry: PluginRegistry) {
    io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
    PathProviderPlugin.registerWith(registry.registrarFor("io.flutter.plugins.pathprovider.PathProviderPlugin"))
}
于 2020-07-07T08:56:05.697 に答える
0

このエラーは、android MainAcitivity で flutter pluging を登録していないために発生しました。

MainActivityのonCreateメソッドを以下のように変更する必要があります。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GeneratedPluginRegistrant.registerWith(this.getFlutterEngine());
}
于 2020-07-02T08:13:29.120 に答える