# Flutter 好用package - url_launcher 介紹 ## url_launcher 一個跨平台的庫,幫助開啟一個URL等。 ``` flutter pub add url_launcher ``` [官網](https://pub.dev/packages/url_launcher) ### 前置動作 沒加下述設定的話,canLaunchUrl 會 return false #### IOS Runner/Info.plist ``` <key>LSApplicationQueriesSchemes</key> <array> <string>sms</string> <string>tel</string> </array> ``` #### [Android](https://developer.android.com/training/package-visibility/use-cases) android/app/src/main/AndroidManifest.xml,加在 `uses-permission` 底下 ```xml <queries> <!-- 打電話 --> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="tel" /> </intent> <!-- 開啟瀏覽器 --> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> </intent> </queries> ``` ### 電話 #### 程式範例 ```dart launchUrl(Uri( scheme: 'tel', path: tel, )); ``` ### 網站 * mode * LaunchMode.inAppWebView:在當前APP內開啟手機擁有的瀏覽器,退背景後只有當前 APP * LaunchMode.externalApplication: 開啟一個手機當前擁有的瀏覽器並顯示在當前 APP 之**上**,退背景會發現有當前 APP 加上剛剛點擊網址後開啟的瀏覽器 * LaunchMode.externalNonBrowserApplication: 開啟一個手機當前擁有的瀏覽器並顯示在當前 APP 之**下**,退背景會發現有當前 APP 加上剛剛點擊網址後開啟的瀏覽器 * webViewConfiguration * enableJavaScript * enableDomStorage * headers #### 程式範例 ```dart final uri = Uri.parse(url); if (await canLaunchUrl(uri)) { await launchUrl( uri, mode: LaunchMode.externalApplication ); } else { throw 'Could not launch $url'; } ``` ###### tags: `flutter`