Flutter中自定義組件一般有兩種方式:

為威縣等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及威縣網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站建設(shè)、威縣網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
CustomPaint繼承自SingleChildRenderObjectWidget,即它可以在通過(guò)嵌套引入到widget樹(shù)中,并且可以有一個(gè)child子widget。它的構(gòu)造方法如下:
painter和foregroundPainter需要接收CustomPainter對(duì)象,是CustomPaint核心。CustomPainter是進(jìn)行UI繪制的核心類(lèi),繪制時(shí), CustomPaint 首先在畫(huà)布上調(diào)用 painter繪制 , 然后再繪制它的 child Widget, child 繪制完成后再調(diào)用 foregroundPainter 進(jìn)行繪制。
size屬性標(biāo)識(shí)繪制區(qū)域大小,但當(dāng)CustomPaint有child,該屬性將會(huì)忽略,而使用child的大小為繪制區(qū)域大小。
isComplex和willChange用于控制繪制層緩存處理的,這里暫不討論。
可實(shí)現(xiàn)CustomPainter子類(lèi)進(jìn)行UI繪制
實(shí)現(xiàn)paint方法進(jìn)行真正的繪制,canvas是畫(huà)布對(duì)象,size是繪制區(qū)域,是從CustomPaint中size屬性傳遞得到的。繪制過(guò)程與Android原生開(kāi)發(fā)十分類(lèi)似,連API都十分相像,這點(diǎn)對(duì)熟悉Android原生開(kāi)發(fā)者真是太友好了。
Paint對(duì)象是畫(huà)筆對(duì)象,就是繪圖工具,我們可以設(shè)置畫(huà)筆的顏色、粗細(xì)、是否抗鋸齒、筆觸形狀以及作畫(huà)風(fēng)格等,通過(guò)這些屬性我們可以很方便的來(lái)定制自己的UI效果,在繪制的過(guò)程中可以定義多個(gè)畫(huà)筆,以便實(shí)現(xiàn)多種風(fēng)格圖形的集合。
根據(jù)需求選擇合適的畫(huà)筆屬性,完成你的繪制。
Canvas是繪制的畫(huà)布,它包含了很多繪制方法,可以繪制出各種形狀的圖形。需要注意的是,畫(huà)布是應(yīng)用所有控件都在使用的, 所以通過(guò)這個(gè)畫(huà)布其實(shí)是可以繪制充滿(mǎn)屏幕的內(nèi)容的,每次繪制都應(yīng)該限制在本控件的區(qū)域(Size)內(nèi), 以免繪制覆蓋到其他組件。
下面介紹下Canvas的繪制方法:
PointMode是個(gè)枚舉
p1、p2為線段兩個(gè)端點(diǎn)
Rect定義矩形的大小位置,有多種構(gòu)造方式:
RRect描述圓角矩形,他通過(guò)Rect和Radius來(lái)構(gòu)造
畫(huà)圓比較簡(jiǎn)單,c表示圓心位置,radius是半徑。
橢圓使用外接矩形確定大小位置,rect就是外接矩形。
繪制弧形,先確定弧形對(duì)應(yīng)的橢圓,同樣地用外接矩形rect確定橢圓,然后根據(jù)起始點(diǎn)和結(jié)束點(diǎn)角度來(lái)確定那一段弧度,startAngle,sweepAngle分別代表起始和結(jié)束點(diǎn)角度,角度用弧度表示法。
useCenter表示是否連接閉合形狀,userCenter = false表示不閉合,即畫(huà)一段弧線,userCenter = true表示閉合,即繪制一個(gè)扇形。
繪制路徑,關(guān)鍵在于構(gòu)建路徑Path,可以直接new Path對(duì)象,然后通過(guò)path方法可以連接出圖形,path關(guān)鍵方法如下:
還有其他方法,有興趣可以查看API。
附上開(kāi)發(fā)環(huán)境:
折線圖是一個(gè) Widget,和普通 Widget一樣聲明即可:
LineChart 的構(gòu)造參數(shù)是一個(gè) LineChartData,其屬性如下:
配置了三條線,所以 lineBarsData 對(duì)應(yīng)的數(shù)組有三個(gè)元素。
看下 LineChartBarData 屬性:
圖表四個(gè)方向的邊框,有總顯示開(kāi)關(guān),決定是否顯示和隱藏所有,如果開(kāi)啟,又想隱藏個(gè)別邊框,需要設(shè)置透明色。
FlBorderData 對(duì)應(yīng)邊框信息,有兩個(gè)參數(shù), show 就是顯示與隱藏的邊框, border 是邊框數(shù)據(jù)。
FlTitlesData 可以配置4條坐標(biāo)軸,也有一個(gè)總開(kāi)關(guān),如果要顯示坐標(biāo)軸,就設(shè)為 true ,然后配置對(duì)應(yīng)位置的數(shù)據(jù):
每個(gè)位置對(duì)應(yīng)的是 SideTitles ,設(shè)置如下:
標(biāo)題是顯示在坐標(biāo)軸后面的文字標(biāo)題,每個(gè)軸對(duì)應(yīng)一個(gè)。
附上源碼
記錄一下charts_flutter 的使用過(guò)程
1.先在pubspec.yaml添加chart包依賴(lài)
我這里使用的版本是
2.定義數(shù)據(jù)類(lèi)型
3.定義數(shù)據(jù)源
如下圖所示,下圖為兩條線同理可加兩條線
ListView的基礎(chǔ)創(chuàng)建使用有三種方式:
通過(guò)默認(rèn)構(gòu)造函數(shù)來(lái)創(chuàng)建列表,應(yīng)用場(chǎng)景 = 短列表
這種方式創(chuàng)建的列表存在一個(gè)問(wèn)題:對(duì)于那些長(zhǎng)列表或者需要較昂貴渲染開(kāi)銷(xiāo)的子組件,即使還沒(méi)有出現(xiàn)在屏幕中但仍然會(huì)被ListView所創(chuàng)建,這將是一項(xiàng)較大的開(kāi)銷(xiāo),使用不當(dāng)可能引起性能問(wèn)題甚至卡頓。
長(zhǎng)列表
列表子項(xiàng)之間需要分割線
ListView的進(jìn)階使用主要包括:下拉刷新 上拉加載
在Flutter中,ListView結(jié)合RefreshIndicator組件實(shí)現(xiàn)下拉刷新
通過(guò)包裹一層RefreshIndicator,自定義onRefresh回調(diào)方法實(shí)現(xiàn)
方式有兩種:
通過(guò)ListView.controller屬性可以判斷ListView是否滑動(dòng)到了底部,再進(jìn)行上拉加載
NotificationListener是一個(gè)Widget,可監(jiān)聽(tīng)子Widget發(fā)出的Notification
ListView在滑動(dòng)時(shí)中會(huì)發(fā)出ScrollNotification類(lèi)型的通知,可通過(guò)監(jiān)聽(tīng)該通知得到ListView的滑動(dòng)狀態(tài),判斷是否滑動(dòng)到了底部,從而進(jìn)行上拉加載
NotificationListener有一個(gè)onNotification屬性,定義了監(jiān)聽(tīng)的回調(diào)方法,通過(guò)它來(lái)處理加載更多邏輯
不定期分享關(guān)于 安卓開(kāi)發(fā) 的干貨,追求 短、平、快 ,但 卻不缺深度 。
Element管理Widget和RenderObject。
widget保持顯示當(dāng)前的頁(yè)面狀態(tài),當(dāng)widget產(chǎn)生點(diǎn)擊等交互,調(diào)用setState()改變element中管理的state,
表格布局和線性布局比較相似,只是使用起來(lái)更簡(jiǎn)潔一些。
本地Flutter 2.10.1,Mac版Android Studio Bumblebee | 2021.1.1 Patch 2
我是小栗子,初學(xué)Flutter ,文章會(huì)根據(jù)學(xué)習(xí)進(jìn)度不定時(shí)更新,請(qǐng)多多指教~~
本文標(biāo)題:flutter畫(huà)表,flutter繪制流程
文章來(lái)源:http://chinadenli.net/article29/dsgedjh.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站收錄、微信小程序、ChatGPT、定制開(kāi)發(fā)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
全網(wǎng)營(yíng)銷(xiāo)推廣知識(shí)