從Android 9.0(API級(jí)別28)開始,默認(rèn)情況下禁用明文支持。因此http的url均無法在webview中加載

10年積累的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有岳麓免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
解決方案 首先保證App申明了網(wǎng)絡(luò)權(quán)限
解決辦法(1):
在Application中打開一個(gè)開關(guān)
解決辦法(2):
res 下新建 xml 目錄,創(chuàng)建文件:network_security_config.xml ,內(nèi)容如下:
在 AndroidManifest.xml 的 application 標(biāo)簽添加配置:
解決辦法(3):
服務(wù)器和本地應(yīng)用都改用 https
flutter 如果設(shè)置一個(gè)不管用那就把兩個(gè)都設(shè)置下,如果還不管用關(guān)閉下工程從新打開下,app從新安裝
網(wǎng)頁(yè)是https鏈接,其中混用了http的圖片,會(huì)導(dǎo)致無法加載。
解決方式:
安卓:
找到FlutterWebViewFactory類,導(dǎo)入三個(gè)頭文件:
在create方法中添加混用模式的支持:
iOS:
info.plist文件中添加字段App Transport Security Settings--Allow Arbitrary Loads--YES
下面這種情況下,為 InkWell 設(shè)置的 splashColor 不會(huì)生效:
需要用 Material 去除背景色,然后將顏色設(shè)置在 InkWell 外部:
在 Dialog builder 中使用 WillPopScope 禁用返回鍵返回:
注意:使用此方法同時(shí)也會(huì)禁用 iOS 上的手勢(shì)滑動(dòng)返回功能,推薦判斷平臺(tái)后再使用。
修改對(duì)話框中的復(fù)選框狀態(tài),最簡(jiǎn)便的方法是通過 Element 中的 markNeedsBuild 方法:
當(dāng)然,更推薦的做法是通過 StatefulBuilder ,然后就可以在 Dialog 中調(diào)用 setState 方法了,不過在調(diào)用 setState 時(shí)需要判斷 Dialog 是否已經(jīng)關(guān)閉,否則會(huì)造成 setState() called after dispose() 的錯(cuò)誤,可以通過添加一個(gè)標(biāo)志位來解決,如下:
在 Web 中加載網(wǎng)絡(luò)圖片有時(shí)會(huì)失敗,遇到這樣的報(bào)錯(cuò): Exception caught by image resource service... ,造成該錯(cuò)誤的原因通常是,圖片跨域了(見 跨域資源共享 )。最簡(jiǎn)單的解決辦法是, 使用 HTML 渲染加載 ,而不是默認(rèn)的 CanvasKit。
Flutter 中所有的 list 默認(rèn)都是沒有 ScrollBar 的,必須使用 ScrollBar 組件。ScrollBar 組件通過監(jiān)聽 ScrollView 的 ScrollNotification 來刷新位置,所以 List 的長(zhǎng)度必須是固定的。
當(dāng)使用 WebView 等高度不定的組件時(shí)會(huì)出現(xiàn)內(nèi)容被截?cái)嗟那闆r,通常可以使用 NestedScrollView 來解決該問題,需要在 WebView 外部嵌套 SingleChildScrollView。
雖然使用了緩存,而且也是用 builder 加載圖片的,但是發(fā)現(xiàn)一個(gè)現(xiàn)象:滑動(dòng)屏幕后圖片短暫消失并重新加載了。圖片高度很高時(shí)這種現(xiàn)象更加明顯,其原因是超出屏幕范圍一定距離的組件被重新渲染了。解決方法是在 ListView 上設(shè)置 cacheExtent 參數(shù):
該參數(shù)的作用是改變超出屏幕高度后繼續(xù)渲染的范圍(以像素為單位),比如設(shè)置成 9999 后意味著超出屏幕 10000 像素以內(nèi)的內(nèi)容都會(huì)被保留下來。
借助 IntrinsicHeight 組件:
另外,IntrinsicHeight 還可以用于 Dialog 或者 BottomSheet 中,使得其中的元素 顯示內(nèi)在元素的高度 ,從而避免元素因?yàn)榧s束的存在而不顯示或者高度太高(比如在使用了 Column 或者 Row 的時(shí)候)。
在通過 Uri 的 queryParameters 獲取 query 參數(shù)時(shí),發(fā)現(xiàn)有些鏈接會(huì)拋出下面異常:
造成該異常的原因是 Uri 默認(rèn)使用 utf-8 解碼超鏈接字符串,如果鏈接中包含非 utf-8 字符,就會(huì)造成上面的錯(cuò)誤,相關(guān) issue 見: issue #31621 。目前該 issue 處于 open 的狀態(tài),暫時(shí)的解決辦法是,在所有使用到 queryParameter 的地方用 try..catch 捕捉可能拋出的異常。
Flutter 開發(fā)非常依賴各種官方或第三方的插件,而在使用這些插件時(shí)多少都會(huì)遇到一些問題,大部分問題都可以通過搜索和查找 issue 來解決。這里記錄下一些我在使用部分插件時(shí)遇到的問題及其解決方法。
目前該庫(kù)沒有圖片加載完成的回調(diào)(見 issue #545 ),不過我們可以通過在 imageBuilder 中來添加回調(diào):
這是一個(gè)應(yīng)用內(nèi)更新插件,安卓 10 以上安裝時(shí)需要在 manifest 中添加以下內(nèi)容:
目前功能最強(qiáng)大的 WebView 插件,基本能滿足絕大部分移動(dòng)端網(wǎng)頁(yè)加載的需求,而且可定制化程度高。
一般通過 CookieManager 修改 Cookie,攔截請(qǐng)求并修改請(qǐng)求對(duì)象的 Header 不會(huì)生效。
InAppWebViewOptions 的 userAgent 只在 iOS 上生效,而 applicationNameForUserAgent 只在 Android 上生效,所以最好的做法是分平臺(tái)設(shè)置 InAppWebViewOptions ,而且需要注意,由于設(shè)置 userAgent 后會(huì)覆蓋默認(rèn)的 UserAgent,所以如果需要在默認(rèn)的 UserAgent 上添加其它參數(shù),iOS 上需要通過 InAppWebViewController.getDefaultUserAgent() 獲取默認(rèn) UserAgent 參數(shù),而 Android 不需要添加。
如果圖片源或者請(qǐng)求是 http 的,為了在 Android 上正常加載請(qǐng)求,必須在 AndroidInAppWebViewOptions 中將 mixedContentMode 設(shè)置為 AndroidMixedContentMode.MIXED_CONTENT_ALWAYS_ALLOW 。
當(dāng)我們想要設(shè)置全屏圖片的時(shí)候,由于默認(rèn)的 Constraint 會(huì)將圖片居中顯示,所以圖片四周會(huì)留有空隙。為了去除這個(gè)限制,我們需要 Xcode 中打開 LaunchScreen.storyboard,然后在 View Controller 的 View 和 LaunchImage 上的 Safe Area 去掉。
具體設(shè)置方法:右側(cè) Inspector 面板 Show the Size inspector 解選 Layout Margins 中的 Safe Area Relative Margins,拖動(dòng)圖片占滿全屏,然后根據(jù) View Controller Scene 的 Warning,更新 Constraint 就可以了。
在集成某些三方庫(kù)之后,在使用命令行運(yùn)行 iOS 模擬器的時(shí)候可能會(huì)遇到下面這個(gè)報(bào)錯(cuò):
這是因?yàn)?iOS 模擬器未來將會(huì)兼容 arm64 架構(gòu),但是目前還不支持,所以我們需要修改 Build Setting 使得能夠在 x86_64 的模擬器上運(yùn)行,操作步驟見 這里 。
簡(jiǎn)單說明flutter使用Dio包發(fā)送請(qǐng)求
1.添加依賴
2.導(dǎo)入dio
3.設(shè)置options
4.發(fā)送請(qǐng)求
解決辦法:
2019-08-05補(bǔ)充:
設(shè)置queryParameters是get請(qǐng)求,如果post失敗可以考慮是否是httpheader的內(nèi)容不符,本人就碰到 Content-Type的問題,默認(rèn) Content-Type為ContentType.json需要根據(jù)自己修改:
1. (鳥)振翼,拍翅
2. (旗幟等)飄動(dòng),飄揚(yáng)
The flag fluttered in the breeze.
旗幟在微風(fēng)中飄動(dòng)。
3. (脈搏,心臟)不規(guī)則跳動(dòng)
Her heart fluttered with fear.
她因害怕心跳得厲害。
4. 焦急地亂動(dòng)
5. 顫動(dòng);(激動(dòng)得)發(fā)抖
His fingers fluttered.
他的手指顫動(dòng)。
vt.
1. 振(翼),拍(翅)
The young bird fluttered its wings.
雛鳥拍打著它的翅膀。
2. 使焦急,使不安
3. 使飄動(dòng)
n.
1. 振翼;飄動(dòng)[S]
2. 興奮;激動(dòng);焦急[S]
That TV play caused a mild flutter among the viewers.
那出電視劇在觀眾中稍稍引起轟動(dòng)。
3. 【英】【口】小賭;小投機(jī)[C][S1]
4. 【醫(yī)】(心臟等的)撲動(dòng),振顫[C]
5. (錄音機(jī))放音失真,音頻顫動(dòng)[U]
這問題,一開始就有。因?yàn)槊χχ矝]管。后來發(fā)現(xiàn)還是很有需要靈活修改代理ip和端口號(hào)的。所以得處理一波了。
因?yàn)楸旧碜鯝ndroid出身,就草船借鑒了下Android里的設(shè)置點(diǎn)個(gè)8下,進(jìn)入開發(fā)者模式的套路。看到這,系不系心如明鏡般?哈哈~ 摸著Android過河也是可以的。
解決方案有了:
我們?cè)O(shè)置了20次,點(diǎn)點(diǎn)點(diǎn)吧,減小誤觸幾率。
這個(gè)Http代理填寫IP和端口號(hào)的頁(yè)面,可以新開一個(gè),就是兩個(gè)輸入框,點(diǎn)Submit后,重置Dio實(shí)例,并把代理設(shè)置給HttpClient。
這里需要注意的是,如果你這里重置了client.findProxy,那么一定要重新實(shí)例化Dio實(shí)例,不然不生效。這一點(diǎn)也可以在源碼中得到印證.
^_^,這就搞完了。還挺簡(jiǎn)單的。但是確實(shí)解決了很大的問題,也很靈活。大家自行拿去試試吧。
文章標(biāo)題:包含httpflutter的詞條
網(wǎng)址分享:http://chinadenli.net/article40/dsidhho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站營(yíng)銷、品牌網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)