如果我們目前的項目是Android的,但是接下來我們希望部分頁面可以使用Flutter進行開發(fā),甚至我們希望在Native頁面中嵌入FlutterUI組件,那么我們該如何實現(xiàn)呢?
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比澄城網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式澄城網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋澄城地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
假設你現(xiàn)在Android項目的目錄的結構是這樣的
這時候如果你想創(chuàng)建一個Flutter模塊,使得Android模塊和Flutter模塊之間可以進行交互,我們可以通過Android Studio新建一個Flutter Module,具體過程是:File — New — New Module ,之后選擇Flutter Module,指定Project Location的路徑為
也就是說,最終你的項目結構會是這樣的
接下來在Android Module的 build.gradle 文件中添加flutter依賴
先創(chuàng)建一個Flutter頁面
這里比較重要的是 window.defaultRouteName 這個字段,這個字段可以接收從Native傳遞過來的參數(shù) (下文我們會介紹原生傳遞參數(shù)的方法),也就是說通過這個字段我們就可以進行Flutter頁面的路由的分發(fā)
我們可以直接在Android的 MainActivity 中啟動一個 FlutterActivity ,這里的 initialRoute 方法中傳遞的參數(shù)就對應Flutter層的 window.defaultRouteName
注意:需要在 AndroidManifest.xml 注冊 FlutterActivity
自己創(chuàng)建一個 FlutterAppActivity 繼承自 FlutterActivity
在 MainActivity 中啟動 FlutterAppActivity (另外別忘了在 AndroidManifest.xml 中注冊 FlutterAppActivity )
兩種啟動方式的區(qū)別
如果單純只是想打開一個Flutter頁面,兩種方式實際上基本沒有太大區(qū)別,第一種方式也許還會更簡單一點。但是,在Flutter開發(fā)中,我們往往還需要開發(fā)一些Native插件供Flutter調用,如果使用復寫 FlutterActivity 的方式更有利于我們在 FlutterActivity 中注冊我們的Native插件,所以實際開發(fā)中一般推薦使用第二種方式
擴展思考
initialRoute 從名稱上看起來是Flutter提供給我們進行Native與Flutter交互的路由跳轉的,但是實際上他就是一個字符串,我們不僅僅可以傳遞一個路由名稱,有時候我們也可以通過這個參數(shù)傳遞一串JSON數(shù)據(jù),然后在Flutter端進行解析,這樣我們就可以通過這個參數(shù)做更多的事情
activity_main.xml
FrameLayout 用于承載Flutter組件
MainActivity.java
使用 FragmentManager 將 FlutterFragment 添加到 FrameLayout 容器中
運行結果
上半部分是原生的TextView,下半部分是Flutter的Text組件
本節(jié)主要介紹了Native和Flutter之間的頁面跳轉,以及同一個頁面中Native與Flutter組件的組合。接下來會介紹如何編寫Android插件與Flutter進行數(shù)據(jù)交互
相對于iOS開發(fā),F(xiàn)lutter的布局更具有靈活性,每個頁面設計都不一樣,相同頁面可選擇的布局方式也不一樣,如果單純的說應該如何去布局,我覺得不現(xiàn)實,大家可以參考下 Flutter官方的布局教程 。接下來,筆者,通過項目中的一個頁面,來一步一步的拆解布局的流程。整個過程,基本上按照拆解、組件封裝、具體布局這三步來的。
根據(jù)設計圖,可以看出整體可以分成兩部分,上面一部分是系統(tǒng)介紹模塊,下面一部分是真正的登錄內容,因為涉及到疊加,因此考慮用Stack;
系統(tǒng)介紹模塊部分:整體也是涉及到疊加,考慮用Stack,分為四部分。最底部漸變色背景用一個contanier,無須指定位置,全視圖擴展;載放logo圖標在上一層,用Image。最后兩個Text同級放在最上層。Image,Text各用Positioned包裹去指定位置。
登錄內容模塊是最外層是一個Contanier容器,去控制背景色和圓角。然后是一個Column元素,逐行排列。
第一行為Image,
第二行為Text,
第三行可以看成一個小Column,分兩塊進行布局
第四行可以看成一個小Column,分兩塊進行布局
第五行可以看作一個TextButton,
第六行可以看作一個Row,分三塊進行布局
通過上面這樣一步一步的分析后,基本上對大致的布局有了一個了解,最外層的控件大致選對(只要能實現(xiàn)的話,就是復雜度以及效率的問題),然后一步一步的拆解每一行的元素,如果有重復的或者覺得可以封裝出來的部分,則進行下一步。
每一行的拆解,大致也是按照這個思路來進行,因此筆者在這里就不做講解了。
在做到第三第四行的時候,發(fā)現(xiàn)這兩個很相似,而且設計到一些交互邏輯,筆者就想對第三第四行的這種展示進行封裝,覺得今后的布局可能會用到,因此在這一步,可以先把這一塊兒抽離出一個控件。利用TextField來實現(xiàn)這種輸入操作,具體的實現(xiàn)筆者不再詳細的描述了。
經(jīng)過這一步,整體的規(guī)劃設計圖已經(jīng)有了,各個組件也都有了,接下來的工作就是組裝了。
具體布局設計到一些細節(jié)的地方,例如整體Column的居中對齊(crossAxisAlignment)、間隔(Padding或Container包裹,筆者更喜歡用SizedBox占位)、居左居右居中(Align)、點擊事件(GestureDetector)以及圓角(BorderRadius)等一些特殊情況。
像第六行row是放在底部的,就可以在第六行前面增加一個Spacer()去填充空白區(qū)域。
對文字顏色大小等,可以用TextStyle直接設置。
對于輸入框的刪除按鈕,可以用Offstage這種Flutter特有的控制顯示隱藏的控件。
在Flutter內部機制中,默認使用自動管理導航機制,該機制在Flutter與原生混和開發(fā)情況下,F(xiàn)lutter頁面不一定作為項目的首頁面,所以出現(xiàn)需要在首個Flutter頁面使用導航返回的需求。
Flutter的AppBar中定義有屬性:
該屬性默認為YES,即默認為自動管理導航欄,該情況下其會在非第一個Flutter頁面創(chuàng)建導航返回按鈕,我們在AppBar中將其設置為false:
并且手動添加導航返回按鈕:
完成
本文名稱:flutter首頁開發(fā),flutter 云開發(fā)
URL標題:http://www.rwnh.cn/article30/dscocpo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗、標簽優(yōu)化、網(wǎng)站策劃、ChatGPT、網(wǎng)站設計公司、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)