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