升級后implements?ActivityAware后會有實(shí)現(xiàn)onAttachedToEngine方法,F(xiàn)lutterPluginBinding.getFlutterEngine().getRenderer().getBitmap();

創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)無棣,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
新建一個(gè)Flutter工程,android模塊。
1,只有一個(gè)Activity組件,它是Dart層繪制Widget的容器。
2,Application配置FlutterApplication。
應(yīng)用Application配置io.flutter.app.FlutterApplication類,App首次啟動時(shí),初始化。
調(diào)用FlutterMain.startInitialization()方法。
initConfig方法,從AndroidManfest.xml配置的applicaion節(jié)點(diǎn)獲取meta-data數(shù)據(jù),初始化以下默認(rèn)值。
這些值都是使用中用到的name,例如,抽取apk中asset資源時(shí),flutter_assets打包目錄,打包產(chǎn)物data名稱。
initResources方法, 初始化資源。
在Flutter打包apk的asset目錄下,包括fluttter_asset目錄/資源項(xiàng),將資源從apk中抽取,保存在 Context.getDir("flutter", 0) 目錄下。
/data/user/0/包名/app_flutter目錄。
在目錄中創(chuàng)建一個(gè)時(shí)間戳文件,根據(jù)apk版本和包信息記錄的lastUpdateTime更新時(shí)間,第二次啟動時(shí),若apk未更新,不需要再次抽取。
加載so庫,libflutter.so,System.loadLibrary()。
主頁面繼承FlutterActivity,配置啟動模式singleTop。
FlutterActivity類在io.flutter.app包, (區(qū)別io.flutter.embedding.android包), 組件生命周期委托給FlutterActivityDelegate類。
組件啟動,onCreate方法。
FlutterMain.ensureInitializationComplete方法,確保資源成功抽取完成,創(chuàng)建FlutterView視圖(io.flutter.view),繼承SurfaceView類,setContentView方法,設(shè)置組件主布局即FlutterView視圖。
最后,根據(jù)Bundle路徑,runBundle()加載運(yùn)行,
調(diào)用FlutterView的runFromBundle方法,入口點(diǎn)在dart的main方法,
通過FlutterNativeView,調(diào)用FlutterJNI的native方法。
nativeRunBundleAndSnapshotFromLibrary方法。
任重而道遠(yuǎn)
對于一些復(fù)雜或不規(guī)則的UI,我們可能無法使用現(xiàn)有的 Widget 組合去實(shí)現(xiàn),比如需要一個(gè)帶動畫的進(jìn)度條,
又或者是一個(gè)特殊形狀的多邊形等等,當(dāng)然有時(shí)候我們可以直接用圖片去實(shí)現(xiàn),但是并沒有達(dá)到我們想要
的效果,反而會讓我們產(chǎn)生不良的體驗(yàn)。
幾乎所有的UI系統(tǒng)都會提供一個(gè)自繪UI的接口,這個(gè)接口通常會提供一塊2D畫布Canvas,Canvas內(nèi)部封裝了
一些基本繪制的API,開發(fā)者可以通過Canvas繪制各種自定義圖形。在Flutter中,提供了一個(gè)CustomPaint Widget,
它可以結(jié)合一個(gè)畫筆CustomPainter來實(shí)現(xiàn)繪制自定義圖形。
我們看看 CustomPaint 構(gòu)造函數(shù):
1.painter: 背景畫筆,會顯示在子節(jié)點(diǎn)后面;
2.foregroundPainter: 前景畫筆,會顯示在子節(jié)點(diǎn)前面
3.size:當(dāng)child為null時(shí),代表默認(rèn)繪制區(qū)域大小,如果有child則忽略此參數(shù),畫布尺寸則為child尺寸。如果有child但是想指定畫布為特定大小,可以使用SizeBox包裹CustomPaint實(shí)現(xiàn)。
4.isComplex:是否復(fù)雜的繪制,如果是,F(xiàn)lutter會應(yīng)用一些緩存策略來減少重復(fù)渲染的開銷。
5.willChange:和isComplex配合使用,當(dāng)啟用緩存時(shí),該屬性代表在下一幀中繪制是否會改變。
可以看到,繪制時(shí)我們需要提供前景或者背景畫筆,兩者也可以同時(shí)提供,
我們的畫筆需要繼承 CustomPainter 類,我們在畫筆類中實(shí)現(xiàn)真正的繪制邏輯。
顧名思義畫布的意思,我們繪制布局當(dāng)然是在一張畫布上進(jìn)行繪制,畫布為我們繪制圖形提供了很多方法。(熟悉畫布的就無需再看了)
在繪制之前我們需要準(zhǔn)備畫筆 Paint,就如畫畫一樣,你用什么筆就能畫什么樣的畫,在Paint中,
我們可以配置畫筆的各種屬性如粗細(xì)、顏色、樣式等。如:
好了,繼承CustomPainter類,然后準(zhǔn)備好畫筆,就可以在畫布上盡情的揮灑了!
寫的挺簡單的,就是介紹了一下自定義view的準(zhǔn)備工作以及畫布畫筆的功能,具體實(shí)戰(zhàn)請看下一篇博客。
FlutterViewController *www = [FlutterViewController new]; ? ? dart 1.22.1 直接初始化 然后報(bào)錯(cuò),有知道是怎么解決的沒
-[__NSCFBoolean objectForKey:]: unrecognized selector sent to instance 0x7fff8019dd18
① 創(chuàng)建原生視圖,可提供外界調(diào)用的方法 / 屬性等。
② 創(chuàng)建遵守 FlutterPlatformViewFactory協(xié)議的 NSObject class 類
③ 創(chuàng)建遵守 FlutterPlatformView 協(xié)議的 NSObject class 類
④ 在 Appdelegate 中注冊
創(chuàng)建個(gè)通信 dart 文件
dart 文件中使用:
網(wǎng)站欄目:flutterview,flutterview deprecated
標(biāo)題來源:http://chinadenli.net/article13/dsepegs.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、關(guān)鍵詞優(yōu)化、外貿(mào)建站、App開發(fā)、微信公眾號、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)