從0到1,不借助任何三方,純手寫自定義日歷:
成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站和眉山服務(wù)器托管的網(wǎng)絡(luò)公司,有著豐富的建站經(jīng)驗(yàn)和案例。
自定義日歷,聽(tīng)起很復(fù)雜,其實(shí)就幾個(gè)關(guān)鍵點(diǎn),理清思路就可以輕松拿捏。
????????Flutter日歷插件,支持自定義日歷,月視圖/周視圖切換、點(diǎn)擊攔截、單選(切換月自動(dòng)選)、多選(散選/聚選)
.----------------------------------------------
| github地址:
|
| pub地址:
|
| apk體驗(yàn):
|
`----------------------------------------------
國(guó)外地址:
國(guó)內(nèi)鏡像:
以 flutter_screenutil 為例
路由框架 annotation_route
狀態(tài)管理 provider
UI適配 flutter_screenutil
刷新控件 flutter_easyrefresh
網(wǎng)絡(luò)請(qǐng)求 dio
toast控件 fluttertoast
圖表庫(kù) charts_flutter
網(wǎng)絡(luò)監(jiān)聽(tīng) connectivity
事件總線 event_bus
日歷組件 table_calendar
官方webview webview_flutter
第三方webview flutter_webview_plugin
該篇文章為常用依賴包總結(jié),用來(lái)記錄所需要的常用依賴包,后續(xù)會(huì)不斷擴(kuò)充內(nèi)容~
最近在寫一個(gè)flutter-ui庫(kù),類似于antd一樣的ui庫(kù),google了很久,都沒(méi)有發(fā)現(xiàn)一個(gè)類似antd這種國(guó)人喜歡用的ui庫(kù),大部分都是國(guó)外的那種material ui,因?yàn)楣径鄠€(gè)flutter項(xiàng)目都需要用,每次都是寫好幾遍,而且還很難維護(hù)所以才有了這個(gè)打算,第一個(gè)要寫的ui組件就是日歷組件,日歷的ui以及數(shù)據(jù),都已經(jīng)寫完了,目前正好需要給日歷寫控制器,所以才有了這篇文章
在無(wú)狀態(tài)組件當(dāng)中,組件的ui由傳入它的參數(shù)決定的,組件本身的不需要管理狀態(tài)。而有狀態(tài)組件會(huì)有多種狀態(tài),而它的狀態(tài)是可以通過(guò)外部控制器來(lái)控制的。比如TextField,創(chuàng)建一個(gè)controller可以給TextField賦值初始值,也可以通過(guò)controller來(lái)獲取到變化之后的value值,而這個(gè)控制器就是controller??梢杂脕?lái)控制一個(gè)有狀態(tài)組件的行為以及狀態(tài)的一個(gè)類
為什么要用controller呢,起初我也沒(méi)想明白為什么要用,因?yàn)閭鲄?shù)也可以解決類似的問(wèn)題啊,就拿TextField來(lái)說(shuō),
但后來(lái)我發(fā)現(xiàn),很多組件內(nèi)部的行為是沒(méi)辦法通過(guò)傳參數(shù)來(lái)控制的,尤其是在特殊的組件生命周期中,沒(méi)辦法實(shí)現(xiàn),而通過(guò)controller,可以很好的解決這個(gè)問(wèn)題,我自己感覺(jué),controller的用處就是提供給外部操作當(dāng)前組件的能力,包括組件的各種狀態(tài),以及組件的各種行為,這里舉個(gè)栗子????
綜上,個(gè)人理解controller的作用就是暴露組件內(nèi)部的行為,屬性給父元素,使父元素可以很方便使用子元素提供的參數(shù),而不需要去實(shí)現(xiàn)監(jiān)聽(tīng)事件來(lái)獲取
回到正題,那么如何實(shí)現(xiàn)一個(gè)自己的controller呢,對(duì)我而言,不會(huì)就抄,抄誰(shuí)的呢,當(dāng)然是超官方的!讀官方的源碼,看它如何實(shí)現(xiàn),然后我們加以模仿,不就是自己的了。竊書(shū)不能算偷……竊書(shū)!……讀書(shū)人的事,能算偷么?
這里借鑒了ScrollController的源碼,首先分析下源碼,以下是ScrollerController的源碼,我把看不懂的英文注釋刪掉了...本菜????看不懂就刪
看了看好像也沒(méi)多少東西,注意當(dāng)前類的定義
是繼承了ChangeNotifier類,看著這個(gè)類頓時(shí)覺(jué)得好眼熟有沒(méi)有,對(duì)了,不就是我們平時(shí)寫provider用的那個(gè)東東嘛,查閱了官方文檔,具體是這么解釋的
用我這渣渣英語(yǔ)翻譯大概的意思就是,一個(gè)類,它可以被繼承,它可以被混合并且它提供了使用VoidCallback進(jìn)行通知的 notification Api
盲猜和provider用法差不多,都是觀察者模式模式,父組件可以訂閱該controller的更改,當(dāng)該controller通知其他監(jiān)聽(tīng)器的時(shí)候,監(jiān)聽(tīng)器的回調(diào)函數(shù)將被執(zhí)行,上面ScrollController中的attach中正好也使用了notification方法來(lái)通知監(jiān)聽(tīng)者,具體滾動(dòng)執(zhí)行的過(guò)程沒(méi)有看到,但是大致了解了controller的工作原理
好了,知道原理了,開(kāi)搞
首先得思考,這個(gè)controller會(huì)提供什么,按照我當(dāng)前給日歷組件的設(shè)計(jì),目前會(huì)給外部提供當(dāng)前日歷所有的行為事件以及最終的值
目前我寫的controller很簡(jiǎn)單,只需要給外部父容器提供上一個(gè)月,下一個(gè)月的方法可以使用就可以,所以我的控制器很簡(jiǎn)單,只有兩個(gè)方法,并且方法執(zhí)行完成之后進(jìn)行消息通知,通知到各個(gè)訂閱者,也就是這里的日期組件 在日期組件的 initState方法中,對(duì)controller進(jìn)行監(jiān)聽(tīng),從而改變ui
最外層父容器是這樣的,當(dāng)前demo用setState臨時(shí)刷新ui
看起來(lái)還不錯(cuò),還有一些ui上的交互需要后續(xù)去調(diào)整
未完待續(xù)...
最近入了flutter的坑,就想著做一行愛(ài)一行,也不能把自己的頭銜寫死了就只做前端,只寫頁(yè)面。flutter寫起來(lái)也蠻舒服的,加油,打工人!
TextFormField繼承自FormField,是flutter表單提交相關(guān)組件,類似于html中的 input type="text" / ,是個(gè)文本輸入框。需要在 Form 組件內(nèi)部使用,否則無(wú)法正確提交數(shù)據(jù)。
未完待續(xù)
作為一名開(kāi)源愛(ài)好者,發(fā)掘優(yōu)秀的開(kāi)源項(xiàng)目是一件非常有趣的事情。在第一期中,我分享了單頁(yè)個(gè)人網(wǎng)站模板、組裝式 Flutter 應(yīng)用框架、PHP 客戶端庫(kù)、Java 診斷工具等一些實(shí)用的庫(kù)和工具。本期依舊會(huì)為大家分享一些前端、后端、移動(dòng)開(kāi)發(fā)的相關(guān)工具,希望你能“淘”到適合自己的工具。
1.Vue-EasyTable
Vue-EasyTable 是一款基于 Vue2.x 的 table 組件,具備自適應(yīng)、表頭與列固定、自定義單元格樣式、自定義 Loading 等功能。
2.React-Calendar
這是一款具備原生日期格式的日歷組件。它不依賴 Moment.js,支持日期選擇范圍,涵蓋了各國(guó)語(yǔ)言,開(kāi)箱即用。
3.Matter
CSS 實(shí)現(xiàn)的 Material 組件合集項(xiàng)目,作者已將部分作品開(kāi)源,效果可以在 CodePen 上查看。
4.Revery
Revery 是一款用于構(gòu)建高性能、跨平臺(tái)桌面應(yīng)用的框架。它類似于加速版的原生 Electron,除了擁有類似 React / Redux 的庫(kù),還具備 GPU 加速渲染功能,其內(nèi)置的編譯器速度也相當(dāng)快。
5.Web Accessibility Guide
這是一個(gè)精選了 Web 可訪問(wèn)性貼士、技巧和最佳實(shí)踐的開(kāi)源項(xiàng)目,你將會(huì)學(xué)習(xí)到一些改善 Web 可訪問(wèn)性的實(shí)用做法。
1.SOFAJRaft
SOFAJRaft 是螞蟻金服開(kāi)源的生產(chǎn)級(jí) Java Raft 算法庫(kù),它基于 Raft 一致性算法的生產(chǎn)級(jí)高性能 Java 實(shí)現(xiàn),支持 MULTI-RAFT-GROUP,適用于高負(fù)載低延遲的場(chǎng)景,易于使用。
2. Dragonwell
阿里開(kāi)源了 OpenJDK 發(fā)行版 Dragonwell,它提供長(zhǎng)期支持,包括性能增強(qiáng)和安全修復(fù)。在數(shù)據(jù)中心大規(guī)模 Java 應(yīng)用部署情況下,可以大幅度提高穩(wěn)定性、效率以及性能。
3.Lawoole
Lawoole 是一款基于 Laravel 和 Swoole 的高性能 PHP 框架。它兼具了 Laravel 的特點(diǎn),還解決了其功能背后的性能問(wèn)題。同時(shí),你還能感受到與 Laravel 一樣的編碼體驗(yàn)。
4.AntNest
AntNest 是一個(gè)簡(jiǎn)潔、快速的異步爬蟲(chóng)框架。它僅有 600 行代碼,基于 Python 3.6+.
5.PHP-Awesome
這個(gè)倉(cāng)庫(kù)匯集了 PHP 優(yōu)秀的資源,供你查詢和參考。
1.FlutterBoost
FlutterBoost 是閑魚(yú)開(kāi)源的新一代 Flutter-Native 混合解決方案。它能夠幫你處理頁(yè)面的映射和跳轉(zhuǎn),你只需要關(guān)心頁(yè)面的名字和參數(shù)即可。
2.MyLayout
MyLayout 是一套 iOS 界面視圖布局框架,可謂 iOS 下的界面布局利器。它集成了 iOS Autolayout、Size Classes、Android 的 5 大布局體系、HTML/CSS 的浮動(dòng)定位技術(shù)以及 Flex-Box 和 Bootstrap 框架等主流的平臺(tái)的界面布局功能,并提供了一套簡(jiǎn)單、完備的多屏幕尺寸適配的解決方案。
3.SegementSlide
SegementSlide 是一個(gè) iOS UI 庫(kù),它具備完整的滑滾及切換組件,旨在解決多層 UIScrollView 嵌套滾動(dòng)的問(wèn)題。
1.DevHub
DevHub 是一款跨平臺(tái)的 GitHub 通知管理客戶端,支持 Android、 iOS、網(wǎng)頁(yè)和桌面上使用,幫助你便捷的接收 GitHub 各類通知。
2.Reqman
Reqman 是一個(gè)幫助后端工程師進(jìn)行 API 測(cè)試的工具,同時(shí)也是一個(gè)基于 Node.js 的爬蟲(chóng)工具。
3.FreeCodeCamp
說(shuō)到 FreeCodeCamp,或許大家不會(huì)陌生,而這個(gè)項(xiàng)目就是他們建立的開(kāi)源課程和相應(yīng)的代碼庫(kù)。網(wǎng)站提供了 6 大認(rèn)證課程,也涉及了全棧開(kāi)發(fā)認(rèn)證。如果你感興趣,不妨了解下。
4.Gitter
Gitter 是 GitHub 小程序客戶端,作者采用 Taro 框架 + Taro UI 進(jìn)行開(kāi)發(fā),而小程序內(nèi)數(shù)據(jù)則來(lái)自 GitHub Api V3.
5.Awesome Podcasts
這個(gè)項(xiàng)目收集了各類實(shí)用的播客,涵蓋了主流的編程語(yǔ)言,希望對(duì)你提升技術(shù)水平有所幫助。
6.編程圖書(shū)大全
書(shū)籍不光能在你迷茫的時(shí)候,給予你答案,還能在你提升技能的時(shí)候,給予你幫助。這個(gè)倉(cāng)庫(kù)收集了眾多編程圖書(shū),涉及主流編程語(yǔ)言、人工智能、算法、Linux、大數(shù)據(jù)等。看看,有木有你需要的。
7.VS Code Netease Music
很多開(kāi)發(fā)者喜歡邊寫代碼,邊聽(tīng)音樂(lè),VS Code Netease Music 這個(gè)插件就能滿足你在 VS Code 上聽(tīng)歌的愿望。它使用 Webview 實(shí)現(xiàn),不依賴命令行播放器。
Star-Battle
Star-Battle 是一款使用 JavaScript ES6、Canvas 開(kāi)發(fā)的飛船射擊類 游戲 。來(lái) Enjoy 吧。
注:
如需轉(zhuǎn)載,煩請(qǐng)按下方注明出處信息,謝謝!
當(dāng)前文章:flutter組件庫(kù)日歷,flutter 列表組件
文章位置:http://aaarwkj.com/article30/dsspsso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、微信公眾號(hào)、ChatGPT、移動(dòng)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、電子商務(wù)
聲明:本網(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)