【Flutter】e: Class ‘SoundStreamPlugin’ is not abstract and does not implement abstract member public abstract fun onRequestPermissionsResult/e: ‘onRequestPermissionsResult’ overrides nothingエラーの対処方法

Flutter

Android StudioでFlutterのアプリ開発を行っていたところ、Androidのビルドでエラーになりました。この問題の解決方法を記録しておきます。

エラー内容

エラーメッセージは次の通りです。(見やすくするために分割しました)

e: /Users/UserName/development/flutter/.pub-cache/hosted/pub.dartlang.org/sound_stream-0.3.0/android/src/main/kotlin/vn/casperpas/sound_stream/SoundStreamPlugin.kt: (45, 8): Class 'SoundStreamPlugin' is not abstract and does not implement abstract member public abstract fun onRequestPermissionsResult(p0: Int, p1: Array<(out) String!>, p2: IntArray): Boolean defined in io.flutter.plugin.common.PluginRegistry.RequestPermissionsResultListener
e: /Users/UserName/development/flutter/.pub-cache/hosted/pub.dartlang.org/sound_stream-0.3.0/android/src/main/kotlin/vn/casperpas/sound_stream/SoundStreamPlugin.kt: (182, 5): 'onRequestPermissionsResult' overrides nothing
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':sound_stream:compileDebugKotlin'.
> Compilation error. See log for more details

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s
Running Gradle task 'assembleDebug'...                           2,093ms
Exception: Gradle task assembleDebug failed with exit code 1

上記2つが今回解消すべきエラーで、SoundStreamPluginクラスのonRequestPermissionsResultメソッドに問題があるようです。

解決方法

/Users/UserName/development/flutter/.pub-cache/hosted/pub.dartlang.org/sound_stream-0.3.0/android/src/main/kotlin/vn/casperpas/sound_stream/SoundStreamPlugin.kt を開きます。

そしてonRequestPermissionsResult()を探します。

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>?, grantResults: IntArray?): Boolean {
  when (requestCode) {
    audioRecordPermissionCode -> {
      if (grantResults != null) {
        permissionToRecordAudio = grantResults.isNotEmpty() &&
          grantResults[0] == PackageManager.PERMISSION_GRANTED
      }
      completeInitializeRecorder()
      return true
    }
  }
  return false
}

この中の引数の’?’を削除します。

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray): Boolean {

再度、Androidでビルドします。

成功しました。

タイトルとURLをコピーしました