使用Java的方式模擬Flutter的Widget實(shí)現(xiàn)多層括號(hào)嵌套
我已經(jīng)研究Flutter很長(zhǎng)時(shí)間了。我就想既然Flutter用的Dart語(yǔ)言,而且括號(hào)又是嵌套多層,很多人都表示不是很理解,也不是很喜歡那么多層括號(hào)嵌套。其實(shí)完全不用擔(dān)心,既然選擇了它,就要接受它,當(dāng)然是選擇原諒它。廢話少說,其實(shí)Java也是可以實(shí)現(xiàn)類似的語(yǔ)法的,下面帶領(lǐng)大家作死的嘗試一下使用Java模擬Flutter的Widget,歡迎各類開發(fā)人員前來(lái)觀戰(zhàn)。
Flutter最重要的是 Widget ,首先我們來(lái)寫一個(gè)類 Widget ,然后有一個(gè) build 函數(shù)。如下所示:
Tips: (我是阿韋。我的公眾號(hào) Flutter 那些事 ,干貨多多,歡迎關(guān)注。惦記我的資料,可以與我取得聯(lián)系。有任何疑問,歡迎在本文后面留言回復(fù)。)
public class Widget { private BuildContext mContext; public Widget build(BuildContext context){ this.mContext = context; return this; } }
接著我們寫一個(gè)重要的類 BuildContext ,如下所示:
我們直接跳過細(xì)節(jié)了,這里寫的都是核心點(diǎn)。
public class BuildContext { public BuildContext(){ } }
接下來(lái)就是一個(gè)關(guān)鍵的類 StatelessWidget ,我們寫一個(gè) StatelessWidget 類繼承自 Widget ,如下所示:
這里面我們不做任何的邏輯處理。只是先把這個(gè)類寫出來(lái)。
public class StatelessWidget extends Widget{ @Override public Widget build(BuildContext context) { return super.build(context); } }
接下來(lái),我們寫寫一個(gè) Column 類繼承自 StatelessWidget ,如下所示:
public class Column extends StatelessWidget { Widget[] childrens; int width; int height; public Column(int width, int height, Widget... children) { this.width = width; this.height = height; this.childrens = children; } @Override public Widget build(BuildContext context) { return super.build(context); } }
接下來(lái),我們寫寫一個(gè) Row 類繼承自 StatelessWidget ,如下所示:
public class Row extends StatelessWidget { Widget[] childrens; int width; int height; public Row(int width, int height, Widget... children) { this.width = width; this.height = height; this.childrens = children; } @Override public Widget build(BuildContext context) { return super.build(context); } }
接下來(lái),我們寫寫一個(gè) Container 類繼承自 StatelessWidget ,如下所示:
public class Container extends StatelessWidget { Widget[] childrens; int width; int height; public Container(int width, int height, Widget... children) { this.width = width; this.height = height; this.childrens = children; } @Override public Widget build(BuildContext context) { return super.build(context); } }
接下來(lái),我們寫寫一個(gè) Text 類繼承自 StatelessWidget ,如下所示:
public class Text extends StatelessWidget { String text; float size; public Text(String text, float size) { this.text = text; this.size = size; } @Override public Widget build(BuildContext context) { return super.build(context); } }
接下來(lái)就是我們的main函數(shù)的處理了,精彩不容錯(cuò)過:
首先我們寫一個(gè) runApp 函數(shù),參數(shù)為 Widget 。具體邏輯我們暫時(shí)不做處理。如下所示:
public class Main { public static void main(String[] args) { runApp(new Home()); } public static void runApp(Widget widget) { } }
接下來(lái)我們寫一個(gè)類 Home 繼承自 StatelessWidget ,如下所示:
public class Home extends StatelessWidget { @Override public Widget build(BuildContext context) { return new Column( 50, 30, new Column( 100, 50, new Row( 200, 100, new Text( "contents", 20 ) ) ), new Container( 100, 150, new Column( 200, 100, new Row( 50, 50, new Text( "contents2", 30 ) ) ) ) ); } }
OK,到此為止,就用Java語(yǔ)言實(shí)現(xiàn)了Flutter里面的多個(gè)括號(hào)嵌套的類似場(chǎng)景,是不是很相似?其實(shí)還是那就話,語(yǔ)言都是想通的,Java也好,Dart也好,都是面向?qū)ο蟮恼Z(yǔ)言,掌握面向?qū)ο缶幊趟枷牒荜P(guān)鍵。哪怕以后換成了其它的面向?qū)ο蟮恼Z(yǔ)言,只要掌握了面向?qū)ο缶幊趟枷?,同樣也可以快速上手開發(fā)。
總結(jié)
以上所述是小編給大家介紹的使用Java的方式模擬Flutter的Widget實(shí)現(xiàn)多層括號(hào)嵌套,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
基于RocketMQ實(shí)現(xiàn)分布式事務(wù)的方法
了保證系統(tǒng)數(shù)據(jù)的一致性,我們需要確保這些服務(wù)中的操作要么全部成功,要么全部失敗,通過使用RocketMQ實(shí)現(xiàn)分布式事務(wù),我們可以協(xié)調(diào)這些服務(wù)的操作,保證數(shù)據(jù)的一致性,這篇文章主要介紹了基于RocketMQ實(shí)現(xiàn)分布式事務(wù),需要的朋友可以參考下2024-03-03java 中HashMap、HashSet、TreeMap、TreeSet判斷元素相同的幾種方法比較
這篇文章主要介紹了從源碼的角度淺析HashMap、TreeMap元素的存儲(chǔ)和獲取元素的邏輯;從Map與Set之間的關(guān)系淺析常用的Set中元素的存儲(chǔ)和判斷是否重復(fù)的邏輯,需要的朋友可以參考下2017-01-01Idea2020 無(wú)法share項(xiàng)目到svn的解決方法
這篇文章主要介紹了Idea2020 無(wú)法share項(xiàng)目到svn的解決方法,需要的朋友可以參考下2020-09-09Spring MVC攔截器_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Spring MVC的攔截器,是屬于HandlerMapping級(jí)別的,可以有多個(gè)HandlerMapping ,每個(gè)HandlerMapping可以有自己的攔截器,具體內(nèi)容詳情大家通過本文學(xué)習(xí)吧2017-08-08Java多線程 生產(chǎn)者消費(fèi)者模型實(shí)例詳解
這篇文章主要介紹了Java多線程 生產(chǎn)者消費(fèi)者模型實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Mybatis查詢方法如何實(shí)現(xiàn)沒有返回值
這篇文章主要介紹了Mybatis查詢方法如何實(shí)現(xiàn)沒有返回值,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Java使用Tinify實(shí)現(xiàn)圖片無(wú)損壓縮(4M無(wú)損壓縮到1M)的方法
在當(dāng)今的數(shù)字化時(shí)代,圖片已成為網(wǎng)站、應(yīng)用和社交媒體中不可或缺的元素,然而,大尺寸的圖片不僅會(huì)增加頁(yè)面或者客戶端加載時(shí)間,還會(huì)占用大量的存儲(chǔ)空間,本文將詳細(xì)介紹如何利用Tinify壓縮圖片,并將其上傳至OSS,重點(diǎn)介紹圖片壓縮實(shí)現(xiàn)方式,需要的朋友可以參考下2024-08-08