99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

flutter黑屏嚴重,flutter運行報錯

回到前臺黑屏引發對Flutter項目生命周期與安卓原生生命周期的思考

目前我們是flutter項目,有個需求是需要在app內引導用戶去appStore或是安卓的應用商店去評價,該需求我選用了兩個插件 in_app_review 和 launch_review , 然而仔做的過程中發現一個問題,當彈出系統的跳轉應用商店的彈框時,iOS是單一彈框,Android是彈出一個選擇打開商店的彈窗,可選擇打開一次或是始終選擇某一個商店打開,此時鎖屏,然后再解鎖,發現iOS沒啥問題,安卓系統彈框后的flutter頁面黑屏了

為揭東等地區用戶提供了全套網頁設計制作服務,及揭東網站建設行業解決方案。主營業務為成都網站制作、做網站、外貿營銷網站建設、揭東網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

看到這個現象,目測是由于安卓的生命周期和flutter的生命周期沒有同步,以下是驗證過程

安卓的MainActivity添加生命周期方法

flutter 添加生命周期方法

還是剛才的場景 鎖屏 安卓和flutter的后臺方法都調用,解鎖回到前臺 只有安卓的前臺方法走 MainActivity會restart,flutter的resume方法,沒有調用,驗證了開始的猜想,是由于flutter沒有檢測到前臺操作或是這種情況flutter不認為自己在前臺,導致flutter沒有執行頁面的重新繪制導致黑屏

關于flutter的生命周期,查閱資料發現 我們可以手動刷新flutter頁面的狀態,即使用

我們只需要在MainActivity restart的時候調用上述 方法 告知flutter重繪,該問題就解決了

關于原生加載flutter頁面 生命周期相關 看這里 能有一些啟發

在Flutter開發iOS中,app啟動黑屏之后顯示啟動頁的解決辦法

一、由于安卓那邊升級了某些插件,我這邊pull之后,進行了Pub get。運行ios項目,發現app啟動之后,先閃現黑屏,然后再出現啟動頁,之后在進入主頁面。解決此問題的方法,是把啟動頁的圖片移除,把啟動頁的圖片修改一個新名字,再導入項目中,再重新運行項目,就正常了。

Flutter 啟動頁的前世今生適配歷程

APP 啟動頁在國內是最常見也是必備的場景,其中啟動頁在 iOS 上算是強制性的要求,其實配置啟動頁挺簡單,因為在 Flutter 里現在只需要:

一般只要配置無誤并且圖片尺寸匹配,基本上就不會有什么問題, 那既然這樣,還有什么需要適配的呢?

事實上大部分時候 iOS 是不會有什么問題, 因為 LaunchScreen.storyboard 的流程本就是 iOS 官方用來做應用啟動的過渡;而對于 Andorid 而言,直到 12 之前 windowBackground 這種其實只能算“民間”野路子 ,所以對于 Andorid 來說,這其中就涉及到一個點:

所以下面主要介紹 Flutter 在 Android 上為了這個啟動圖做了哪些騷操作~

在已經忘記版本的“遠古時期” , FlutterActivity 還在 io.flutter.app.FlutterActivity 路徑下的時候,那時啟動頁的邏輯相對簡單,主要是通過 App 的 AndroidManifest 文件里是否配置了 SplashScreenUntilFirstFrame 來進行判斷。

在 FlutterActivity 內部 FlutterView 被創建的時候,會通過讀取 meta-data 來判斷是否需要使用 createLaunchView 邏輯 :

是不是很簡單,那就會有人疑問為什么要這樣做?我直接配置 Activity 的 android:windowBackground 不就完成了嗎?

這就是上面提到的時間差問題, 因為啟動頁到 Flutter 渲染完第一幀畫面中間,會出現概率出現黑屏的情況,所以才需要這個行為來實現過渡 。

經歷了“遠古時代”之后, FlutterActivity 來到了 io.flutter.embedding.android.FlutterActivity , 在到 2.5 版本發布之前,Flutter 又針對這個啟動過程做了不少調整和優化,其中主要就是 SplashScreen 。

自從開始進入 embedding 階段后, FlutterActivity 主要用于實現了一個叫 Host 的 interface ,其中和我們有關系的就是 provideSplashScreen 。

默認情況下它會從 AndroidManifest 文件里是否配置了 SplashScreenDrawable 來進行判斷 。

默認情況下當 AndroidManifest 文件里配置了 SplashScreenDrawable ,那么這個 Drawable 就會在 FlutterActivity 創建 FlutterView 時被構建成 DrawableSplashScreen 。

DrawableSplashScreen 其實就是一個實現了 io.flutter.embedding.android.SplashScreen 接口的類,它的作用就是:

之后 FlutterActivity 內會創建出 FlutterSplashView ,它是個 FrameLayout。

FlutterSplashView 將 FlutterView 和 ImageView 添加到一起, 然后通過 transitionToFlutter 的方法來執行動畫,最后動畫結束時通過 onTransitionComplete 移除 splashScreenView 。

所以整體邏輯就是:

當然這里也是分狀態:

當然這個階段的 FlutterActivity 也可以通過 override provideSplashScreen 方法來自定義 SplashScreen 。

看到沒有,做了這么多其實也就是為了彌補啟動頁和 Flutter 渲染之間, 另外還有一個優化,叫 NormalTheme 。

通過該配置 NormalTheme ,在 Activity 啟動時,就會首先執行 switchLaunchThemeForNormalTheme(); 方法將主題從 LaunchTheme 切換到 NormalTheme 。

大概配置完就是如下樣子, 前面分析那么多其實就是為了告訴你,如果出現問題了,你可以從哪個地方去找到對應的點 。

講了那么多, Flutter 2.5 之后 provideSplashScreen 和 io.flutter.embedding.android.SplashScreenDrawable 就被棄用了,驚不喜驚喜,意不意外,開不開心 ?

通過源碼你會發現,當你設置了 splashScreen 的時候,會看到一個 log 警告:

為什么會棄用?

其實這個提議是在 這個 issue 上,然后通過 這個 pr 完成調整。

大概意思就是: 原本的設計搞復雜了,用 OnPreDrawListener 更精準,而且不需要為了后面 Andorid12 的啟動支持做其他兼容,只需要給 FlutterActivity 等類增加接口開關即可 。

也就是2.5之后 Flutter 使用 ViewTreeObserver.OnPreDrawListener 來實現延遲直到加載出 Flutter 的第一幀。

為什么說默認情況? 因為這個行為在 FlutterActivity 里,是在 getRenderMode() == RenderMode.surface 才會被調用,而 RenderMode 又和 BackgroundMode 有關心 。

所以在 2.5 版本后, FlutterActivity 內部創建完 FlutterView 后就會執行一個 delayFirstAndroidViewDraw 的操作。

這里主要注意一個參數: isFlutterUiDisplayed 。

當 Flutter 被完成展示的時候, isFlutterUiDisplayed 就會被設置為 true。

所以當 Flutter 沒有執行完成之前, FlutterView 的 onPreDraw 就會一直返回 false ,這也是 Flutter 2.5 開始之后適配啟動頁的新調整。

看了這么多,大概可以看到其實開源項目的推進并不是一帆風順的,沒有什么是一開始就是最優解,而是經過多方嘗試和交流,才有了現在的版本,事實上開源項目里,類似這樣的經歷數不勝數:

Flutter中 webview的鍵盤問題解決

webview的版本是webview_flutter: ^0.3.22+1

現在遇到的問題是如果webview中輸入密碼的話,像華為這種會調用自己的安全鍵盤,這時候就會黑屏,應該是內部計算鍵盤高度的問題。這時候沒辦法了,網頁web端密碼框需要修改一下了自己自定義一下不調用密碼類型就好,但是無法被輸入框彈上去,后來解決方案是用SingleChildScrollView包裹一下,然后自己監聽一下鍵盤的彈窗和隱藏做一下jump的高度就好了

ps: jump的時候要注意高度,可以在鍵盤出來的時候底部增加一個只有高度的view,鍵盤收起隱藏就好了

flutter應用長時間在后臺,點開黑屏

重新打開即可。

因為軟件在后臺時間過長,軟件會出現一個黑屏動畫,就需要重啟軟件即可恢復。

分享標題:flutter黑屏嚴重,flutter運行報錯
網站URL:http://www.yijiale78.com/article42/dsccjec.html

成都網站建設公司_創新互聯,為您提供網頁設計公司商城網站面包屑導航云服務器外貿建站用戶體驗

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站制作