Flutter啟動黑屏解決方案

不想看分析流程? 想直接看解決方案的可以跳到下面直接看解決方案!

在網(wǎng)上找了很多辦法都沒有解決黑屏,本著百度不到就谷歌,谷歌不到就翻源碼的習慣。翻看了一下android端的源碼,從啟動流程一直走一直走,發(fā)現(xiàn)flutter啟動其實創(chuàng)建了一個flutter engine (flutter引擎)然后設置,之后開始創(chuàng)建flutterView。我們的解決問題的關鍵就在于flutterView。

來看這一段代碼:


這里邊創(chuàng)建了一個FlutterView,而后又創(chuàng)建了一個FlutterSplashView。注意看紅框內(nèi)的代碼,顯示閃屏flutterView,里面?zhèn)魅肓藘蓚€參數(shù),還有一個FlutterView是我們剛剛創(chuàng)建的,還有一個參數(shù)是我想就是我們想找的啟動頁了。繼續(xù)跟進,尋找provideSplashScreen是什么,發(fā)現(xiàn)它是一個名為Host的接口里的一個方法,所以進而尋找它的實現(xiàn)類:

大致意思就是獲取一個Drawable對象,如果這個Drawable對象不為nulll就創(chuàng)建一個圖片閃屏對象,我們看一下這個Drawable對象到底是何方神圣:

找到了,在manifest文件里activity下的metaData里找到一個keyio.flutter.embedding.android.SplashScreenDrawable資源id,并通過context.getResources().getDrawable()返回一個Drawable對象,如果沒有就返回null。所以我們明白了。如果在Manifest文件下設置了io.flutter.embedding.android.SplashScreenDrawable的值那么就會顯示閃屏頁,否則只是會添加flutterView。

注:本次源碼分析基于flutterSDK版本為? ?v1.12.13+hotfix.9-stable

解決辦法:

在AndroidManifest文件下添加metaData:


resource就是你要添加的啟動頁圖片,也可以是一個顏色(需要在指向的Drawable里設置)。

注:代碼爆紅是因為這不是一個Android Project。只要指對了相應的drawable即可?

大功告成!撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容