「Flutter/外部ライブラリ/url launcher」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→インストール) |
|||
| (同じ利用者による、間の6版が非表示) | |||
| 行9: | 行9: | ||
dependencies: | dependencies: | ||
url_launcher: ^5.4.1 | url_launcher: ^5.4.1 | ||
| + | |||
| + | ==ブラウザ起動サンプル== | ||
| + | <pre> | ||
| + | _launchURL() async { | ||
| + | const url = 'https://flutter.dev'; | ||
| + | if (await canLaunch(url)) { | ||
| + | await launch(url); | ||
| + | } else { | ||
| + | throw 'Could not launch $url'; | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | 参考:https://qiita.com/superman9387/items/868ce6ad60b3c177bff1 | ||
==メール起動サンプル== | ==メール起動サンプル== | ||
| 行22: | 行35: | ||
参考:https://qiita.com/sekitaka_1214/items/c7b3251e3d4ea1dd4f53 | 参考:https://qiita.com/sekitaka_1214/items/c7b3251e3d4ea1dd4f53 | ||
| − | == | + | ==url起動サンプル== |
| − | + | httpsのurlを開く場合 | |
| − | + | import 'package:url_launcher/url_launcher_string.dart'; | |
| − | + | void launchAppPrivacyUrl() async { | |
| − | + | String url = "ttps://example.com/privacy.html"; | |
| − | + | if (await canLaunchUrlString(url)) { | |
| − | + | await launchUrlString(url); | |
| − | + | } else { | |
| + | throw 'Could not launch $url'; | ||
| + | } | ||
} | } | ||
| − | + | ||
| + | ↓はNG。(QUERY_ALL_PACKAGESをつけると、AndroidのPlayStoreで、審査が入り、理由を問われるが審査が通らなかった) | ||
| + | |||
| + | android/app/src/main/AndroidManifest.xmlにuser-permissionのQUERY_ALL_PACKAGESを追加 | ||
| + | <pre> | ||
| + | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> | ||
| + | <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> | ||
| + | <queries> | ||
| + | <package android:name="com.example.app1" /> | ||
| + | <intent> | ||
| + | <action android:name="android.intent.action.VIEW" /> | ||
| + | <category android:name="android.intent.category.BROWSABLE" /> | ||
| + | <data android:scheme="https" /> | ||
| + | </intent> | ||
</pre> | </pre> | ||
| − | |||
| − | == | + | ==component name for is nullが起こる場合== |
| + | エラー詳細 | ||
| + | I/UrlLauncher(19372): component name for ttps://example.com/privacy.html is null | ||
| + | |||
| + | 対策方法 | ||
| + | |||
| + | android/app/src/main/AndroidManiest.xml | ||
| + | <pre> | ||
| + | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> | ||
| + | <uses-permission android:name="android.permission.INTERNET"/> | ||
| + | <queries> | ||
| + | <package android:name="com.mskjgo.memotyou" /> | ||
| + | <intent> | ||
| + | <action android:name="android.intent.action.VIEW" /> | ||
| + | <category android:name="android.intent.category.BROWSABLE" /> | ||
| + | <data android:scheme="https" /> | ||
| + | </intent> | ||
| + | <intent> | ||
| + | <action android:name="android.intent.action.VIEW" /> | ||
| + | <data android:scheme="https" /> | ||
| + | </intent> | ||
| + | </queries> | ||
| + | </pre> | ||
| + | 参考:https://zenn.dev/flutteruniv_dev/articles/ee377ae7f1fe05 | ||
| + | |||
| + | ==ui_dart_state.cc(157)が起こる場合== | ||
| + | エラー詳細 | ||
[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(No implementation found for method canLaunch on channel plugins.flutter.io/url_launcher) | [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(No implementation found for method canLaunch on channel plugins.flutter.io/url_launcher) | ||
2024年1月3日 (水) 01:10時点における最新版
目次
url launcherとは
外部起動させるもので、メールやブラウザを起動できる。
公式
https://pub.dev/packages/url_launcher
インストール
pubspec.yaml
dependencies: url_launcher: ^5.4.1
ブラウザ起動サンプル
_launchURL() async {
const url = 'https://flutter.dev';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
参考:https://qiita.com/superman9387/items/868ce6ad60b3c177bff1
メール起動サンプル
_launchMail() async {
String url = "mailto:sample@example.com?subject=subject1&body=" + Uri.encodeComponent("本文1");
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
参考:https://qiita.com/sekitaka_1214/items/c7b3251e3d4ea1dd4f53
url起動サンプル
httpsのurlを開く場合
import 'package:url_launcher/url_launcher_string.dart';
void launchAppPrivacyUrl() async {
String url = "ttps://example.com/privacy.html";
if (await canLaunchUrlString(url)) {
await launchUrlString(url);
} else {
throw 'Could not launch $url';
}
}
↓はNG。(QUERY_ALL_PACKAGESをつけると、AndroidのPlayStoreで、審査が入り、理由を問われるが審査が通らなかった)
android/app/src/main/AndroidManifest.xmlにuser-permissionのQUERY_ALL_PACKAGESを追加
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<queries>
<package android:name="com.example.app1" />
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
component name for is nullが起こる場合
エラー詳細
I/UrlLauncher(19372): component name for ttps://example.com/privacy.html is null
対策方法
android/app/src/main/AndroidManiest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET"/>
<queries>
<package android:name="com.mskjgo.memotyou" />
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
</queries>
参考:https://zenn.dev/flutteruniv_dev/articles/ee377ae7f1fe05
ui_dart_state.cc(157)が起こる場合
エラー詳細
[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: MissingPluginException(No implementation found for method canLaunch on channel plugins.flutter.io/url_launcher)
おそらく再ビルドしてないためで、以下実行か、
$ flutter clean
androidStudioでビルド停止から起動するなどするとよい。
