🔗

【Flutter】url_launcher で発生した MissingPluginException の対処法

2021/05/04に公開

Flutterのurl_launcherを使ってAndroidでURLを開こうとしたときに、MissingPluginExceptionが発生してハマったので、対処法について書いてみたいと思います。

エラーメッセージ

E/flutter ( 8237): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: MissingPluginException(No implementation found for method launch on channel plugins.flutter.io/url_launcher)
E/flutter ( 8237): #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:7)
E/flutter ( 8237): <asynchronous suspension>
E/flutter ( 8237): #1      MethodChannelUrlLauncher.launch.<anonymous closure> (package:url_launcher_platform_interface/method_channel_url_launcher.dart)
E/flutter ( 8237): <asynchronous suspension>

対処法

MainActivity.ktを以下のように変更します。

MainActivity.kt

import android.os.Bundle
import io.flutter.app.FlutterActivity
// 追加
import io.flutter.plugins.urllauncher.UrlLauncherPlugin

class MainActivity : FlutterActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
	// 追加
	UrlLauncherPlugin.registerWith(registrarFor("io.flutter.plugins.urllauncher.UrlLauncherPlugin"))
    }
}

URL を開く実装

void _launchURL() async {
  var url = 'https://developer.android.com/?hl=ja';
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}

r Hot reloadR Hot restartではなく、flutter runでアプリを再起動します。

環境

Flutter

Flutter 2.0.6 • channel stable
Dart 2.12.3

url_launcher

dependencies:
  url_launcher: ^6.0.3

build.gradle

compileSdkVersion: 30
minSdkVersion: 16
targetSdkVersion: 30

Discussion