正確在Flutter中添加webview實現(xiàn)詳解
前言
為什么要在flutter中引入webview?這不是廢話么,當然是為了加載一個網(wǎng)頁,這不是移動端最基本的需求么,哈哈!說的真不錯,接下來我要是告訴你我的用法,你可能要大吃一驚。我的用處很簡單,那就是在webview中再加載一個flutter編譯成web的項目。有沒有嚇到你。別怕,我這么做的原因很簡單,就是為了熱更新??赡茉趂lutter中實現(xiàn)熱更新的方法有很多,但我敢說我這么做就是最好的熱更新方式。當我內(nèi)容發(fā)生變更是時候,我不需要繼續(xù)去審核,只需要在服務(wù)器中,更新內(nèi)容,我的熱更新就實現(xiàn)了!是不是聽著很動心,那就趕緊學(xué)起來吧。
安裝
在Flutter應(yīng)用開發(fā)中,由于官方并沒有提供類似Webview的網(wǎng)頁加載組件,所以如果項目中涉及網(wǎng)頁加載就需要使用第三方插件庫。網(wǎng)上第三方插件庫很多,我不推薦,自行百度搜索比較,用法基本雷同,webview_flutter是Flutter官方開發(fā)和維護的網(wǎng)頁加載插件庫。所以今天我講講它的使用方法
- 在pubspec.yaml文件中添加依賴腳本(并運行隱式flutter pub get)
dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 webview_flutter: ^3.0.4
- 使用
import 'package:flutter/material.dart'; import 'dart:io'; import 'package:webview_flutter/webview_flutter.dart'; class WebviewApp extends StatefulWidget { const WebviewApp({Key? key}) : super(key: key); @override State<WebviewApp> createState() => _WebviewAppState(); } class _WebviewAppState extends State<WebviewApp> { @override void initState() { super.initState(); if (Platform.isAndroid) WebView.platform = AndroidWebView(); } @override Widget build(BuildContext context) { return const WebView( initialUrl: 'https://www.baidu.com', javascriptMode: JavascriptMode.unrestricted, ); } }
好了,這樣我們就成功引入了webview,并在webview中加載了百度首頁。你高興的去運行項目,結(jié)果卻傻眼了,終端一片紅,好了,我來說說爆紅的解決方案。
運行項目遇到的問題
One or more plugins require a higher Android SDK version.
- 解決方案:找到 項目根目錄\android\app\build.gradle,修改如下配置:
android { compileSdkVersion 32 }
Error: uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library
- 解決方案:找到 項目根目錄\android\app\build.gradle,修改如下配置:
defaultConfig { applicationId "com.example.flutter_jsbridge_js" minSdkVersion 20 targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName }
net:ERR_CLEARTEXT_NOT_PERMITTED
這時候運行項目已經(jīng)已經(jīng)不會報錯了,但是webview卻顯示一串神奇代碼:
net:ERR_CLEARTEXT_NOT_PERMITTED,這是因為從 Android 9(API 級別 28)開始,明文支持默認處于禁用狀態(tài)。
- 解決方案:
創(chuàng)建文件:/xml/network_security_config.xml
目錄路徑:“項目根目錄/android/app/main/res”
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">api.example.com(to be adjusted)</domain> </domain-config> </network-security-config>
- 對AndroidManifest.xml文件做修改:
<?xml version="1.0" encoding="utf-8"?> <manifest ...> <uses-permission android:name="android.permission.INTERNET" /> <application ... android:networkSecurityConfig="@xml/network_security_config" ...> ... </application> </manifest>
這時候再去運行項目,就可以正常運行了,畫面顯示正常,如果你還需要遇到其他問題,可以留言一起解決。
以上就是正確在Flutter中添加webview實現(xiàn)詳解的詳細內(nèi)容,更多關(guān)于Flutter添加webview的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android SeekBar 自定義thumb旋轉(zhuǎn)動畫效果
某些音樂播放或者視頻播放的界面上,資源還在加載時,進度條的原點(thumb)會顯示一個轉(zhuǎn)圈的效果。這篇文章主要介紹了Android SeekBar 自定義thumb thumb旋轉(zhuǎn)動畫效果,需要的朋友可以參考下2021-11-11基于Android實現(xiàn)跳轉(zhuǎn)到WiFi開關(guān)設(shè)置頁的詳細步驟
在Android應(yīng)用開發(fā)中,有時候需要引導(dǎo)用戶到特定的系統(tǒng)設(shè)置頁面,例如Wi-Fi開關(guān)設(shè)置頁,可以通過隱式Intent來實現(xiàn)這一功能,以下是詳細的步驟以及相關(guān)的Kotlin代碼示例,需要的朋友可以參考下2024-09-09基于Android FileProvider 屬性配置詳解及FileProvider多節(jié)點問題
這篇文章主要介紹了基于Android FileProvider 屬性配置詳解及FileProvider多節(jié)點問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android自定義View實現(xiàn)仿網(wǎng)易音樂唱片播放效果
這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)仿網(wǎng)易音樂唱片播放效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04Android RecyclerView緩存復(fù)用原理解析
RecyclerView是Android一個更強大的控件,其不僅可以實現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實現(xiàn)數(shù)據(jù)縱向滾動,也可以實現(xiàn)橫向滾動(ListView做不到橫向滾動)。接下來講解RecyclerView的用法2022-11-11Android獲取當前應(yīng)用分配的最大內(nèi)存和目前使用內(nèi)存的方法
今天小編就為大家分享一篇關(guān)于Android獲取當前應(yīng)用分配的最大內(nèi)存和目前使用內(nèi)存的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02Android遞歸方式刪除某文件夾下的所有文件(.mp3文件等等)
以刪除為例,當然,對于遍歷某文件夾下的所有文件均可用這個方法。如搜索.mp3文件等,具體實現(xiàn)如下,感興趣的朋友可以參考下哈2013-06-06Android之PreferenceActivity應(yīng)用詳解
為了引入這個概率 首先從需求說起 即:現(xiàn)有某Activity專門用于手機屬性設(shè)置 那么應(yīng)該如何做呢2012-11-11