真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

包含flutter適合開發(fā)的詞條

Flutter混合開發(fā)實(shí)戰(zhàn)

之前開發(fā)了一個(gè)純Flutter的項(xiàng)目,結(jié)果接到個(gè)新的需求需要使用Flutter單獨(dú)開一個(gè)模塊集成到原有的android項(xiàng)目中

成都創(chuàng)新互聯(lián)公司是專業(yè)的東海網(wǎng)站建設(shè)公司,東海接單;提供網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行東海網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

下面分享一下如何集成現(xiàn)有的項(xiàng)目和如何繼承以及碰到的問(wèn)題

1.首先第一步 修改gradle

因?yàn)?Flutter 當(dāng)前僅支持為 x86_64,armeabi-v7a 和 arm64-v8a 構(gòu)建預(yù)編(AOT)的庫(kù) 所以我們需要修改gradle的文件限制 APK 中支持的架構(gòu),從而避免 libflutter.so找不到引起的崩潰

2.新建一個(gè)FlutterModel的工程

2.使用aar文件 因?yàn)樗泄こ探y(tǒng)一使用jenkins打包所以我們放在本地肯定是不合適的

說(shuō)以我們需要 打包aar并上傳服務(wù)器

上傳完成后在android中引用

在開發(fā)中遇到的問(wèn)題

1.關(guān)于android和Ios中的跳轉(zhuǎn)傳參問(wèn)題

這個(gè)問(wèn)題在android端還是比較方便的 但是的在Ios端并不怎么好實(shí)現(xiàn)

最終決定使用flutter_boost來(lái)完成android和Ios與Flutter的通信操作

flutter_boost github地址:

集成文檔:

集成文檔給出了 但是沒有android的 尷尬

下滿分享下android的集成

(1)在flutter的 pubspec.yaml工程中添加

(2)修改android工程

使用本地工程的時(shí)候需要在工程共添加

使用aar的時(shí)候不需要添加

(3)在android工程中添加對(duì)應(yīng)的條狀路由配置

(4)在使用默認(rèn)的flutter_boost啟動(dòng)界面的時(shí)候可能碰到狀態(tài)欄丟失的情況

所以最好集成BoostFlutterActivity寫一個(gè)新的activity方便處理狀態(tài)欄和activity進(jìn)出動(dòng)畫

(5)跳轉(zhuǎn)并傳參

//params 傳多個(gè)參數(shù)可以使用json的形式

2.在flutter中的網(wǎng)絡(luò)框架使用的dio結(jié)果在ios的彈出loading的時(shí)候出現(xiàn)卡頓現(xiàn)象

解決方式:1.服務(wù)換證書 (但是后臺(tái)太忙暫時(shí)沒有支持的人員)

2.ios使用原生的loading解決

3.在使用dio的時(shí)候出現(xiàn)ios部分手機(jī) 網(wǎng)絡(luò)請(qǐng)求緩慢問(wèn)題

解決方法:請(qǐng)求的時(shí)候使用http 2.0協(xié)議

插件地址:

Flutter開發(fā)--如何布局?

相對(duì)于iOS開發(fā),F(xiàn)lutter的布局更具有靈活性,每個(gè)頁(yè)面設(shè)計(jì)都不一樣,相同頁(yè)面可選擇的布局方式也不一樣,如果單純的說(shuō)應(yīng)該如何去布局,我覺得不現(xiàn)實(shí),大家可以參考下 Flutter官方的布局教程 。接下來(lái),筆者,通過(guò)項(xiàng)目中的一個(gè)頁(yè)面,來(lái)一步一步的拆解布局的流程。整個(gè)過(guò)程,基本上按照拆解、組件封裝、具體布局這三步來(lái)的。

根據(jù)設(shè)計(jì)圖,可以看出整體可以分成兩部分,上面一部分是系統(tǒng)介紹模塊,下面一部分是真正的登錄內(nèi)容,因?yàn)樯婕暗蒋B加,因此考慮用Stack;

系統(tǒng)介紹模塊部分:整體也是涉及到疊加,考慮用Stack,分為四部分。最底部漸變色背景用一個(gè)contanier,無(wú)須指定位置,全視圖擴(kuò)展;載放logo圖標(biāo)在上一層,用Image。最后兩個(gè)Text同級(jí)放在最上層。Image,Text各用Positioned包裹去指定位置。

登錄內(nèi)容模塊是最外層是一個(gè)Contanier容器,去控制背景色和圓角。然后是一個(gè)Column元素,逐行排列。

第一行為Image,

第二行為Text,

第三行可以看成一個(gè)小Column,分兩塊進(jìn)行布局

第四行可以看成一個(gè)小Column,分兩塊進(jìn)行布局

第五行可以看作一個(gè)TextButton,

第六行可以看作一個(gè)Row,分三塊進(jìn)行布局

通過(guò)上面這樣一步一步的分析后,基本上對(duì)大致的布局有了一個(gè)了解,最外層的控件大致選對(duì)(只要能實(shí)現(xiàn)的話,就是復(fù)雜度以及效率的問(wèn)題),然后一步一步的拆解每一行的元素,如果有重復(fù)的或者覺得可以封裝出來(lái)的部分,則進(jìn)行下一步。

每一行的拆解,大致也是按照這個(gè)思路來(lái)進(jìn)行,因此筆者在這里就不做講解了。

在做到第三第四行的時(shí)候,發(fā)現(xiàn)這兩個(gè)很相似,而且設(shè)計(jì)到一些交互邏輯,筆者就想對(duì)第三第四行的這種展示進(jìn)行封裝,覺得今后的布局可能會(huì)用到,因此在這一步,可以先把這一塊兒抽離出一個(gè)控件。利用TextField來(lái)實(shí)現(xiàn)這種輸入操作,具體的實(shí)現(xiàn)筆者不再詳細(xì)的描述了。

經(jīng)過(guò)這一步,整體的規(guī)劃設(shè)計(jì)圖已經(jīng)有了,各個(gè)組件也都有了,接下來(lái)的工作就是組裝了。

具體布局設(shè)計(jì)到一些細(xì)節(jié)的地方,例如整體Column的居中對(duì)齊(crossAxisAlignment)、間隔(Padding或Container包裹,筆者更喜歡用SizedBox占位)、居左居右居中(Align)、點(diǎn)擊事件(GestureDetector)以及圓角(BorderRadius)等一些特殊情況。

像第六行row是放在底部的,就可以在第六行前面增加一個(gè)Spacer()去填充空白區(qū)域。

對(duì)文字顏色大小等,可以用TextStyle直接設(shè)置。

對(duì)于輸入框的刪除按鈕,可以用Offstage這種Flutter特有的控制顯示隱藏的控件。

flutter開發(fā)體驗(yàn)總結(jié)

flutter目前最火的混合開發(fā)技術(shù),作為苦逼的移動(dòng)開發(fā)人員了解下總是沒有錯(cuò)的,針對(duì)最近自己的學(xué)習(xí),進(jìn)行相關(guān)總結(jié),希望在座的看官,看完此文后,能對(duì)flutter移動(dòng)開發(fā)有個(gè)大概的了解,希望能給你開發(fā)flutter帶來(lái)個(gè)大體的認(rèn)知,由于學(xué)習(xí)接觸時(shí)間不過(guò),如有講錯(cuò)的地方,請(qǐng)?jiān)谠u(píng)論區(qū)指出,謝謝;

注:經(jīng)過(guò)多重比較,個(gè)人覺得AS是比較適合flutter移動(dòng)開發(fā)的,集成方便,插件支持多,不虧是google大佬的親兒子,安卓開發(fā)人員過(guò)渡也比較方便;

程序入口指定,也可以指定為別的widget;

從左往右的功能對(duì)應(yīng):

在文章開篇的時(shí)候,我有提過(guò),在flutter開發(fā)里面,可謂一切界面皆是widget,對(duì)于安卓開發(fā)人員,可以理解為增強(qiáng)版fragment(碎片),基本所有的和界面相關(guān)的實(shí)現(xiàn)都在當(dāng)中實(shí)現(xiàn)。

說(shuō)到widget就必須聊到今天一個(gè)很重要的主題,StatelessWidget, StatefulWidget,因?yàn)榇蟛糠纸缑娴膶?shí)現(xiàn)都需要通過(guò)集成他們來(lái)實(shí)現(xiàn)界面顯示。

注:有前端用flex開發(fā)使用的經(jīng)驗(yàn)的同學(xué),完全可以參考flex屬性使用。

為什么Flutter開發(fā)APP性能最接近原生,前端程序員請(qǐng)關(guān)注

Flutter是谷歌公司推出的跨終端的開發(fā)框架,支持Android、iOS和WEB終端。1.0版在2018年12月5日發(fā)布,目前的最新版本是1.5,它采用的開發(fā)語(yǔ)言是Dart,Dart也是谷歌開發(fā)的計(jì)算機(jī)編程語(yǔ)言,語(yǔ)法類似C,是編譯型語(yǔ)言:

hello world例子,打印字符串“Hello World!”:

1、沒有橋接層

React Native、Weex等技術(shù)都是跨終端的框架,然而性能跟原生App存在很大差距。這是由于它們的工作原理決定的:

React Native、Weex等技術(shù)多了一個(gè)橋接層,所以界面渲染會(huì)慢一些,由于UI渲染非常頻繁,想要不卡頓,基本上比較難,性能和用戶體驗(yàn)跟原生代碼有差距。而這恰恰是Flutter的優(yōu)勢(shì)所在:

Dart可以被編譯成不同平臺(tái)的本地代碼,讓Flutter不通過(guò)橋接層直接跟平臺(tái)通信,自然性能會(huì)快一些。

2、編譯執(zhí)行

JavaScript是解釋執(zhí)行的,Dart是編譯執(zhí)行的,性能誰(shuí)好一目了然。

3、Flutter Engine虛擬機(jī)

Flutter是依靠Flutter Engine虛擬機(jī)在iOS和Android上運(yùn)行的,F(xiàn)lutter Engine使用C/C++編寫,開發(fā)人員通過(guò)Flutter框架直接和API在內(nèi)部進(jìn)行交互,所以具有輸入低延遲和UI渲染高幀速率的特點(diǎn)。除了這特點(diǎn)之外,F(xiàn)lutter還提供了自己的小部件,F(xiàn)lutter小部件是使用從React獲取靈感的現(xiàn)代框架構(gòu)建的。 中心思想是您使用小部件構(gòu)建UI。

窗口小部件根據(jù)其當(dāng)前配置和狀態(tài)描述了它們的視圖。 當(dāng)窗口小部件的狀態(tài)發(fā)生更改時(shí),窗口小部件會(huì)重建其描述,框架將根據(jù)前面的描述進(jìn)行區(qū)分,以確定底層呈現(xiàn)樹從一個(gè)狀態(tài)轉(zhuǎn)換到下一個(gè)狀態(tài)所需的最小更改。可以直接在OS平臺(tái)提供的畫布上進(jìn)行描繪,也就是一些核心類庫(kù)直接放到虛擬機(jī)里面,調(diào)用起來(lái)更快。

從它的系統(tǒng)結(jié)構(gòu)可以看出,類似安卓的ART(Android Run Time)虛擬機(jī),同樣采用AOT(Ahead of TIme)技術(shù),會(huì)在APP安裝時(shí)就編譯成機(jī)器語(yǔ)言,不再解釋執(zhí)行,從而優(yōu)化了APP運(yùn)行的性能。

4、自帶渲染引擎

Flutter使用谷歌自己的Skia渲染引擎,而Android系統(tǒng)自帶Skia引擎,iOS平臺(tái)上Flutter也會(huì)把Skia引擎打包到APP中,從而實(shí)現(xiàn)了高效渲染。而React Native通過(guò)橋接層訪問(wèn)原生UI,操作頻繁就容易出性能問(wèn)題。

綜合所述,F(xiàn)lutter 是性能最接近原生代碼 的一種開發(fā)框架,未來(lái)也會(huì)是構(gòu)建谷歌Fuchsia應(yīng)用的主要方式,前途不可限量,唯一的問(wèn)題就是需要學(xué)習(xí)一門新的語(yǔ)言:Dart,而有Java或者C#語(yǔ)言基礎(chǔ)的程序員會(huì)比較容易學(xué)習(xí)。

Flutter開發(fā)--視頻播放器

目前Flutter平臺(tái)主流的兩個(gè)播放器是video_player和fijkplayer

pub

github

1、Flutter平臺(tái)官方插件,作者是國(guó)外的,有問(wèn)題溝通比較困難,只能通過(guò)提交issue

2、硬解碼

4、UI封裝: better_player

基于video_player和Chewie的高級(jí)視頻播放器。它解決了許多典型的用例,并且易于運(yùn)行。

5、播放器寬高比例與視頻內(nèi)容寬高比例不一致時(shí),會(huì)出現(xiàn)圖像壓縮變形的問(wèn)題

6、調(diào)用原生內(nèi)核播放器:iOS--AVPlayer, Android--ExoPlayer

7、對(duì)于分段源 m3u8 的播放不友好,如果一個(gè)切片播放超時(shí),會(huì)導(dǎo)致整個(gè)播放都失敗

8、better_player可以緩存視頻,但不能自定義緩存的地址,只能指定key,和緩存的最大內(nèi)存量(還未研究超出最大的話是不能緩存新的,還是刪除最舊的)

9、better_player不能完全自定義UI,只能修改類中的一些開放屬性,比如說(shuō)icon圖標(biāo),文字顏色啥的

10、無(wú)網(wǎng)絡(luò)有緩存時(shí),封面可以正常展示

11、better_player播放失敗有手動(dòng)retry的設(shè)計(jì)

pub

github

1、fijkplayer 是一個(gè) Flutter 生態(tài)的媒體播放器,是對(duì) ijkplayer 的 Flutter 封裝,支持 Android 和 iOS。 fijkplayer 使用 ijkplayer 作為播放器內(nèi)核,ijkplayer 使用 ffmpeg 進(jìn)行音視頻解封裝和解碼,同時(shí)添加了 Android 和 iOS 平臺(tái)特有的硬件加速解碼能力。

2 、國(guó)內(nèi)有QQ群,但是活躍度也是不高。

3、可以緩存視頻,可以自定義緩存的地址,方便后續(xù)的內(nèi)存維護(hù)。

4、可以通過(guò)FijkPanelWidgetBuilder較大程度上自定義UI。

5、無(wú)網(wǎng)絡(luò)有緩存視頻時(shí),無(wú)法展示封面,因?yàn)閮?nèi)部是通過(guò)imageProvider去加載網(wǎng)絡(luò)圖片的。

7、播放失敗無(wú)手動(dòng)retry的設(shè)計(jì)

1、兩種播放器都是通過(guò)外接紋理方案 (Texture),將播放器視頻畫面渲染接入 flutter 中,性能上優(yōu)于 PlatformView 的接入方法。

如何自己實(shí)現(xiàn)?

下面以video_palyer的iOS源碼部分解釋:

iOS用CVPixelBufferRef將渲染出來(lái)的數(shù)據(jù)存在內(nèi)存中,F(xiàn)lutter engine會(huì)將Texture的數(shù)據(jù)在內(nèi)存中直接進(jìn)行映射無(wú)需通過(guò)Channel傳輸,然后Texture Widget就可以把你提供的這些數(shù)據(jù)顯示出來(lái)。在我們傳輸數(shù)據(jù)的時(shí)候會(huì)需要將其與 TextureID 綁定,綁定的過(guò)程通過(guò)BasicMessageChannel實(shí)現(xiàn)數(shù)據(jù)流的傳輸,以做到實(shí)時(shí)展示的效果


新聞標(biāo)題:包含flutter適合開發(fā)的詞條
網(wǎng)頁(yè)鏈接:http://weahome.cn/article/hojsej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部