網站首頁 編程語言 正文
前言
為什么要在flutter中引入webview?這不是廢話么,當然是為了加載一個網頁,這不是移動端最基本的需求么,哈哈!說的真不錯,接下來我要是告訴你我的用法,你可能要大吃一驚。我的用處很簡單,那就是在webview中再加載一個flutter編譯成web的項目。有沒有嚇到你。別怕,我這么做的原因很簡單,就是為了熱更新??赡茉趂lutter中實現熱更新的方法有很多,但我敢說我這么做就是最好的熱更新方式。當我內容發生變更是時候,我不需要繼續去審核,只需要在服務器中,更新內容,我的熱更新就實現了!是不是聽著很動心,那就趕緊學起來吧。
安裝
在Flutter應用開發中,由于官方并沒有提供類似Webview的網頁加載組件,所以如果項目中涉及網頁加載就需要使用第三方插件庫。網上第三方插件庫很多,我不推薦,自行百度搜索比較,用法基本雷同,webview_flutter是Flutter官方開發和維護的網頁加載插件庫。所以今天我講講它的使用方法
- 在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中加載了百度首頁。你高興的去運行項目,結果卻傻眼了,終端一片紅,好了,我來說說爆紅的解決方案。
運行項目遇到的問題
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
這時候運行項目已經已經不會報錯了,但是webview卻顯示一串神奇代碼:
net:ERR_CLEARTEXT_NOT_PERMITTED,這是因為從 Android 9(API 級別 28)開始,明文支持默認處于禁用狀態。
- 解決方案:
創建文件:/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>
這時候再去運行項目,就可以正常運行了,畫面顯示正常,如果你還需要遇到其他問題,可以留言一起解決。
原文鏈接:https://juejin.cn/post/7172543739544469511
相關推薦
- 2022-08-21 golang字符串本質與原理詳解_Golang
- 2022-07-07 ASP.Net使用System.Security.Principal模擬用戶_實用技巧
- 2022-04-10 vscode快速輸出格式化console.log
- 2022-05-09 Python數據可視化之使用matplotlib繪制簡單圖表_python
- 2022-07-12 Linux創建定時執行任務
- 2022-07-30 Golang?獲取系統信息的實現_Golang
- 2022-06-28 python神經網絡使用Keras進行模型的保存與讀取_python
- 2021-12-14 如何利用C語言輸出3D立體感心形圖詳解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支