下圖看起來(lái)和使用Container做的線顯示效果一樣
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的北戴河網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
Flutter 官方對(duì)解釋的不是很清楚
通過(guò)測(cè)試對(duì)比發(fā)現(xiàn)Flutter在渲染小于1邏輯像素的線的時(shí)候,其高度是按1邏輯像素去展示的,只不過(guò)看到的顏色會(huì)不一樣,當(dāng)設(shè)置線的高度不是整數(shù)邏輯像素時(shí),線的高度是線上取整后的邏輯像素,只不過(guò)看到的線上下邊緣的顏色會(huì)隨著小數(shù)部分的值越大顏色越接近設(shè)置的顏色。也就是說(shuō)flutter是以1邏輯像素的整數(shù)倍去顯示的,如果是非整數(shù)倍邏輯像素線上下邊緣的顏色會(huì)跟設(shè)置的不一樣(以灰度的方式顯示出來(lái))。
ios 原生目前也可以展示小于1物理像素的點(diǎn),但是以UIView的控件做的線,其高度有個(gè)臨界值,低于臨界值的線會(huì)顯示不出來(lái),而且其顯示的線邊緣比較銳利,其高度在到某一臨界值后會(huì)直接變高,而不是在線上下邊緣做灰度展示。而用原生繪制出來(lái)的線展示小于以邏輯像素的時(shí)候其高度均展示為1邏輯像素,不過(guò)顏色值會(huì)以灰度的方式展示出來(lái),在達(dá)到邏輯像素的整數(shù)倍時(shí)展示設(shè)置的顏色,這是和flutter一樣的。
比如拿iPhone 6s 舉例,其屏幕寬度是2.3英寸,橫向上有750顆像素點(diǎn),ppi = 750/2.3 = 326,既每寸上有326個(gè)物理像素,換算成厘米也就是 326/2.54 = 128.35,也就是說(shuō)每厘米上有128.35個(gè)物理像素點(diǎn),每毫米有13個(gè)物理像素點(diǎn),也就是每個(gè)物理像素點(diǎn)的寬度是0.077毫米。6s 的邏輯寬度是375,橫向上每厘米有375/(2.3*2.54) = 64邏輯像素/cm,也就是6s上每個(gè)邏輯像素的寬度是0.156毫米。當(dāng)我們?cè)O(shè)置一邏輯像素寬度時(shí)其在6s上對(duì)應(yīng)的寬度是0.156毫米。
算數(shù)運(yùn)算符:加(+) 減(-) 乘(*) 除(/) 取余(%) 取整(~/)
關(guān)系運(yùn)算符:(==)(!=)()()(=)(=)
邏輯運(yùn)算符:(!)()(||)
賦值運(yùn)算符:(=)(??=)(+=)(-=)(*=)(/=)(%=)(~/=)
1.圓角對(duì)性能的影響
盡量避免用Clipxxx組件,建議用BoxDecoration的image屬性實(shí)現(xiàn),如果用Clipxxx組件,圓角取整后性能會(huì)提升。
2.減少重繪
根據(jù)場(chǎng)景合理使用RePaintBoundary,使繪制獨(dú)立于父布局,避免重繪,提升性能,但過(guò)度使用增加的圖層會(huì)帶來(lái)Raster合成的耗時(shí)。例如scrollview是滑動(dòng)過(guò)程會(huì)導(dǎo)致所有的節(jié)點(diǎn)都重繪,可以在scrollview下一層使用RePaintBoundary。
3.滾動(dòng)步長(zhǎng)插值器優(yōu)化(了解)
官方的滾動(dòng)差值器在出現(xiàn)小卡頓時(shí),滾動(dòng)步長(zhǎng)會(huì)出現(xiàn)大的跳躍,導(dǎo)致體感上出現(xiàn)很明顯的抖動(dòng),優(yōu)化步長(zhǎng)偏移量算法與原生效果對(duì)齊。
4.開(kāi)啟SurfaceView
官方推薦Flutter用SurfaceView ,因?yàn)镾urfaceView與應(yīng)用窗口內(nèi)容分隔開(kāi),在專有硬件中合成,產(chǎn)生的中間副本少于TextureView,所以性能高,占用內(nèi)存少,但是在混合棧遇到的問(wèn)題需要突破
5.使用RepaintBoundary 提升頻繁重繪控件的性能。使用RelayoutBoundary提升頻繁修改大小,增刪的布局中也可以提升性能。
6.build中不要去寫(xiě)大量的耗時(shí)邏輯,因?yàn)閿?shù)據(jù)更新會(huì)觸發(fā)build的多次調(diào)用,在里面做耗時(shí)邏輯會(huì)降低性能。
7.盡量使用statelessWidget代替statefulWidget,因?yàn)閟tatefulWidget的銷(xiāo)毀重建會(huì)引起子widget的銷(xiāo)毀與重建。
8.解析json可以放到子線程線程中,開(kāi)Isolate去解析,這樣,當(dāng)返回?cái)?shù)據(jù)特別大的時(shí)候也不會(huì)阻塞界面。
9.使用不變的組件的時(shí)候可以添加const,const組件不會(huì)進(jìn)行build更新
10.由于flutter通過(guò)widget.runtimeType和key來(lái)判斷是否需要跟新組建,所以我們寫(xiě)組件的時(shí)候盡量保持key不變,或者不寫(xiě)key。對(duì)于一些需要頻繁改變,例如新增、刪除、排序的最好加上key。如果type一直,如果不寫(xiě)key容易導(dǎo)致,element無(wú)法區(qū)分新舊widget,導(dǎo)致無(wú)法更新。
1、數(shù)值型-Number
2、布爾型-Boolean
3、字符串-String
4、列表-List
5、鍵值對(duì)-Map
1、int: 整數(shù),數(shù)值
2、double: 浮點(diǎn)型數(shù)值,帶有小數(shù)點(diǎn)
運(yùn)算符:+,-,*,/,~/(取整),%;
字符串操作
運(yùn)算符:+,*,==,[]
插值表達(dá)式:${expression}
常用屬性:length,isEmpty(是否為空)
Map 對(duì)象
Flutter 的Dart語(yǔ)言,數(shù)字向上或者向下取整數(shù)。
例如:
6除以5想要獲取到不同的值
控制小數(shù)點(diǎn)精度
標(biāo)題名稱:flutter取整,float取整和取小數(shù)
標(biāo)題路徑:http://www.rwnh.cn/article44/dsigehe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、虛擬主機(jī)、定制開(kāi)發(fā)、ChatGPT、網(wǎng)站維護(hù)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)