Flutter啟動(dòng)黑屏解決方案

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

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

來(lái)看這一段代碼:


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

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

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

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

解決辦法:

在AndroidManifest文件下添加metaData:


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

注:代碼爆紅是因?yàn)檫@不是一個(gè)Android Project。只要指對(duì)了相應(yīng)的drawable即可?

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

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

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

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