🔗
【Flutter】url_launcher で発生した MissingPluginException の対処法
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 reload
、R 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