不想看分析流程? 想直接看解決方案的可以跳到下面直接看解決方案!
在網(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è)key為io.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即可?
大功告成!撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。