Uniapp目前比較成熟,而且用的是Vue語法,學(xué)習(xí)成本比較低,而且行業(yè)里面用的也比較廣泛,而Flutter的話,學(xué)習(xí)成本略高,因為要學(xué)習(xí)新的語言,還有就是目前生態(tài)不是特別完備,等他再發(fā)展發(fā)展吧。黑馬程序員官網(wǎng)有成套免費視頻哦,有什么不懂的可以直接過去學(xué)習(xí)。您的采納是對我成長的鞭策
成都創(chuàng)新互聯(lián)專注于楚雄州企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),成都商城網(wǎng)站開發(fā)。楚雄州網(wǎng)站建設(shè)公司,為楚雄州等地區(qū)提供建站服務(wù)。全流程按需設(shè)計網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
如果我們目前的項目是Android的,但是接下來我們希望部分頁面可以使用Flutter進(jìn)行開發(fā),甚至我們希望在Native頁面中嵌入FlutterUI組件,那么我們該如何實現(xiàn)呢?
假設(shè)你現(xiàn)在Android項目的目錄的結(jié)構(gòu)是這樣的
這時候如果你想創(chuàng)建一個Flutter模塊,使得Android模塊和Flutter模塊之間可以進(jìn)行交互,我們可以通過Android Studio新建一個Flutter Module,具體過程是:File — New — New Module ,之后選擇Flutter Module,指定Project Location的路徑為
也就是說,最終你的項目結(jié)構(gòu)會是這樣的
接下來在Android Module的 build.gradle 文件中添加flutter依賴
先創(chuàng)建一個Flutter頁面
這里比較重要的是 window.defaultRouteName 這個字段,這個字段可以接收從Native傳遞過來的參數(shù) (下文我們會介紹原生傳遞參數(shù)的方法),也就是說通過這個字段我們就可以進(jìn)行Flutter頁面的路由的分發(fā)
我們可以直接在Android的 MainActivity 中啟動一個 FlutterActivity ,這里的 initialRoute 方法中傳遞的參數(shù)就對應(yīng)Flutter層的 window.defaultRouteName
注意:需要在 AndroidManifest.xml 注冊 FlutterActivity
自己創(chuàng)建一個 FlutterAppActivity 繼承自 FlutterActivity
在 MainActivity 中啟動 FlutterAppActivity (另外別忘了在 AndroidManifest.xml 中注冊 FlutterAppActivity )
兩種啟動方式的區(qū)別
如果單純只是想打開一個Flutter頁面,兩種方式實際上基本沒有太大區(qū)別,第一種方式也許還會更簡單一點。但是,在Flutter開發(fā)中,我們往往還需要開發(fā)一些Native插件供Flutter調(diào)用,如果使用復(fù)寫 FlutterActivity 的方式更有利于我們在 FlutterActivity 中注冊我們的Native插件,所以實際開發(fā)中一般推薦使用第二種方式
擴(kuò)展思考
initialRoute 從名稱上看起來是Flutter提供給我們進(jìn)行Native與Flutter交互的路由跳轉(zhuǎn)的,但是實際上他就是一個字符串,我們不僅僅可以傳遞一個路由名稱,有時候我們也可以通過這個參數(shù)傳遞一串JSON數(shù)據(jù),然后在Flutter端進(jìn)行解析,這樣我們就可以通過這個參數(shù)做更多的事情
activity_main.xml
FrameLayout 用于承載Flutter組件
MainActivity.java
使用 FragmentManager 將 FlutterFragment 添加到 FrameLayout 容器中
運行結(jié)果
上半部分是原生的TextView,下半部分是Flutter的Text組件
本節(jié)主要介紹了Native和Flutter之間的頁面跳轉(zhuǎn),以及同一個頁面中Native與Flutter組件的組合。接下來會介紹如何編寫Android插件與Flutter進(jìn)行數(shù)據(jù)交互
目前,最優(yōu)的選擇有四個:
1.如果只在win下使用,.net form是不二選擇,可謂是又快又好,企業(yè)應(yīng)用或定制開發(fā)都是相當(dāng)好的,初學(xué)者也可以入手。
2.electron,跨平臺。需要會前端,必須熟悉js、css和html。屬于前端人員大殺器,如果是初學(xué)者,需要一下子學(xué)三樣?xùn)|西,再加上electron的進(jìn)程間通信,可能會被搞懵。
3. qt5,可以使用qml(js語法)進(jìn)行UI編程,但是需要懂c艸,但是寫軟件相當(dāng)快,還可以寫安卓、ios、Linux、嵌入式中的應(yīng)用。
4.flutter,剛剛正式支持win平臺的軟件開發(fā)。谷歌出的這個東西,適合沒有基礎(chǔ)的初學(xué)者,因為是一個全新的體系,全新的語言,寫ios、安卓非常高效,之后還會兼容h5。如果是初學(xué)者可以跟著走,值得嘗試。但是新東西總有一些坑。
正式項目跨平臺建議electron或qt,只用win平臺強(qiáng)烈建議微軟自己的net。個人技術(shù)嘗試建議flutter。
桌面端開發(fā)跨平臺的,如果你是輕量級的項目,那么我推薦你用electron, 目前使用Electron來開發(fā)的桌面應(yīng)用非常多,我們最熟悉的比如Atom,VScode等等。
而且在github上也能找到許多應(yīng)用使用了electron。
electron是Node,Chromium,html,css,js的結(jié)合框架,這就需要你有一定的前端基礎(chǔ)。其實只需要了解一下electron的API就行了,其他的就像你在做web是一樣的。
這種方式最大的缺點就是性能,還有透明窗口也有問題。所以在做需要性能方面占有很大成分的項目時,并不推薦使用這個方式。
那么其他的,就是最近幾年使用比較多的windows directui框架,但它不是跨平臺的。
那么就引出了qt,作為c++跨平臺的界面框架,這個上手的話,我覺得對一般人是有難度的,因為首先需要扎實的c++功底,其次你要熟悉控件的制作原理,因為有時候你需要定制自己的UI控件。它現(xiàn)在在嵌入式,軍工領(lǐng)域非常受歡迎。但是整個庫非常臃腫龐大,而且開發(fā)界面的效率也非常低。如果來做互聯(lián)網(wǎng)項目,迭代更新的速度根本就跟不上。
目前都只有大公司會采用,像maya這種生產(chǎn)力型的應(yīng)用很多是qt做的。
還有一種是直接使用Cef加js,比如網(wǎng)易云音樂,就是這么搞的,但是很多和系統(tǒng)平臺的交互接口你需要重寫,等于是需要自己造輪子。工作量大,目前沒有適合的框架給你套用,也需要扎實的c++功底。
其實pc端的應(yīng)用基本也就windows會火一些,再加一個macos,那么選擇qt應(yīng)該會很好一點,畢竟你自己造一個跨平臺的框架,太費時??傊?,做跨平臺就意味著,不可能做到既有效率又完美的實現(xiàn)各種功能,許多都要自己摸索。
win桌面端直接上visual studio??!然后你熟悉什么語言?vb.net,c#,c++都有相應(yīng)的win桌面工具。直接用就好了,非常好用
編程語言這種東西無所謂,只要能用啥都可以。 主要看你老板需要和你會用什么語言。
比如 我用AS編安卓程序,當(dāng)然用JAVA。不過我后臺最開始用ASP和ASP.NET來做,現(xiàn)在換PHP了。桌面端用QT或者VB做。 涉及單片機(jī)部分控制也用C。
現(xiàn)在做跨平臺的了 開始以QT為主了。
只要能達(dá)到目的啥都可以。
學(xué)會1-2種 換其他的也不是很難。
對初學(xué)者來建議學(xué)C起步吧。
精通一門,重新學(xué)個語言入門也就1個月的事。
PC桌面程序,如果簡單一點的,用pyqt5+python的開發(fā)難度和周期都比較現(xiàn)實一點
會C++ 用Qt5 非常不錯 寫代碼效率很高
會js 用atom使用的那個框架
會Python用PyQt 寫代碼很快
會java用JavaFX
看語言咯
還可以用delphi,其firemonkey框架發(fā)布8年時間,支持跨平臺:win,安卓,ios,macos,linux,后續(xù)支持webassembly,界面是控件拖拽布局所見即所得,開發(fā)效率較高。編譯生成的是機(jī)器碼,編譯速度快,調(diào)試方便,其生成機(jī)器碼運行效率較高,支持x86,arm的32位64位處理器。支持跨平臺3D界面,藍(lán)牙通訊,定位,重力,攝像等,支持多種SQL,NoSQL數(shù)據(jù)庫。單個開發(fā)工具實現(xiàn)前后端開發(fā),跨平臺開發(fā)。適合個人和小公司用一套工具實現(xiàn)大部分開發(fā)需求。
主要有以下幾種技術(shù)
### Duilib
#### 簡述
Duilib是在Windows平臺上使用最廣泛的類庫,使用C++和XML混合編程,國內(nèi)很多計算機(jī)企業(yè)都喜歡使用這個類庫,可能是由于他的技術(shù)許可比較寬泛的原因。
適合于界面比較簡單的軟件,視覺特效豐富,局限于Windows的平臺。例子:360電腦管家。
#### 優(yōu)勢
#### 劣勢
### Gtk、Qt或WxWidget:
#### 簡述
三種基本可以做到跨平臺的技術(shù),使用C/C++開發(fā),使用者廣泛。其中WxWidget使用了API嫁接方式,Qt和Gtk(包括各種綁定技術(shù))使用自繪技術(shù)。
結(jié)構(gòu)嚴(yán)謹(jǐn),軟件可以做的很大很復(fù)雜。例子:WPS和Maya。
#### 優(yōu)勢
#### 劣勢
### Electron:
#### 簡介
使用Web技術(shù)開發(fā)桌面軟件,基于Chromium(Chrome)引擎,使用JS編程語言,絕大多數(shù)使用者都是原來的網(wǎng)頁開發(fā)者。
絕大多數(shù)都是愛好者使用,處于“勉強(qiáng)可用”的地步。
適合大面積靜態(tài)展示型軟件使用。例子:網(wǎng)易云音樂。
#### 優(yōu)勢
#### 劣勢
### QtQuick(QML)
#### 簡述
Qt公司開發(fā)的一款基于OpenGL的圖形類庫,有顯卡加速,類似于Duilib。采用了C++與QML混合編程。QML類似于JavaScript語言。
QtQuick下一個版本在Qt 6上更加強(qiáng)大,業(yè)界期待已久。
#### 優(yōu)勢
#### 劣勢
### Atk、Swing或JavaFX
使用Java語言開發(fā)軟件,有JDK加持業(yè)界積累的眾多Java類庫支持。有不輸于VS的IDEA加持,本應(yīng)該更棒,只是現(xiàn)在已經(jīng)式微了。
絕大多數(shù)使用者都是企業(yè)開發(fā)(不追求界面美觀)、愛好者(開發(fā)順手)。
### WinForm、WPF或Xamarin:
使用C#開發(fā),WinForm和WPF局限于Windows平臺。有VisualStudio加持使用很爽。
### Flutter:
使用Dart語言,新類庫,bug可能會很多。
### SwiftUI或Cocoa:
蘋果平臺原生界面技術(shù),macOS平臺內(nèi)建支持,不是macOS專用軟件不推薦。
### Win32:
經(jīng)典Windows 平臺API,絕大多數(shù)只有一些老軟件還在使用,不是維護(hù)老軟件不推薦。
winform,不二選擇
webview2,作為一個瀏覽器控件嵌入在桌面應(yīng)用中,支持.net core和.net framework
隨著我們對web前端編程開發(fā)技術(shù)的掌握,越來越多的框架語言和架構(gòu)方式被我們所熟知。
下面四川北大青鳥就一起來了解一下,web前端開發(fā)的一些常見框架結(jié)構(gòu)。
1.全包型這類框架大的特點就是從底層的渲染引擎、布局引擎,到中層的DSL,再到上層的框架全部由自己開發(fā),代表框架是Qt和Flutter。
這類框架優(yōu)點非常明顯:性能(的上限)高;各平臺渲染結(jié)果一致。
缺點也非常明顯:需要完全重新學(xué)習(xí)DSL(QML/Dart),以及難以適配中國特色的端:小程序。
這類框架是原始也是純正的的多端開發(fā)框架,由于底層到上層每個環(huán)節(jié)都掌握在自己手里,也能大可能地去保證開發(fā)和跨端體驗一致。
但它們的框架研發(fā)成本巨大,渲染引擎、布局引擎、DSL、上層框架每個部分都需要大量人力開發(fā)維護(hù)。
2.Web技術(shù)型這類框架把Web技術(shù)(JavaScript,CSS)帶到移動開發(fā)中,自研布局引擎處理CSS,使用JavaScript寫業(yè)務(wù)邏輯,使用流行的前端框架作為DSL,各端分別使用各自的原生組件渲染。
代表框架是ReactNative和Weex,這樣做的優(yōu)點有:開發(fā)迅速;復(fù)用前端生態(tài);易于學(xué)習(xí)上手,不管前端后端移動端,多多少少都會一點JS、CSS。
缺點有:1.交互復(fù)雜時難以寫出高性能的代碼,這類框架的設(shè)計就必然導(dǎo)致JS和Native之間需要通信,類似于手勢操作這樣頻繁地觸發(fā)通信就很可能使得UI無法在16ms內(nèi)及時繪制。
ReactNative有一些聲明式的組件可以避免這個問題,但聲明式的寫法很難滿足復(fù)雜交互的需求。
2.由于沒有渲染引擎,使用各端的原生組件渲染,相同代碼渲染的一致性沒有一種高。
3.JavaScript編譯型這類框架就是我們這篇文章的主角們:Taro、WePY、uni-app、mpvue、chameleon,它們的原理也都大同小異:先以JavaScript作為基礎(chǔ)選定一個DSL框架,以這個DSL框架為標(biāo)準(zhǔn)在各端分別編譯為不同的代碼,各端分別有一個運行時框架或兼容組件庫保證代碼正確運行。
1、常用布局的對比
使用下來其他組件大致還算方便,但是相對布局而言使用便利程度上Android原生完勝,ConstraintLayout內(nèi)部的所有子View可以設(shè)置互相之間的位置依賴關(guān)系。
而Flutter的Stack組件內(nèi)部的Children只能通過外層包裹 Align后 固定位置,比如 Alignment.topLeft、Alignment.bottomRight 等。遇到復(fù)雜的堆疊布局需要通過外層包裹 Positioned 組件后設(shè)置固定的 top 和 left 距離以達(dá)到效果,內(nèi)部子組件之間無法設(shè)置位置關(guān)聯(lián)關(guān)系。
2、一些常用屬性設(shè)置上的差異:
Margin外邊距
Android:直接在布局文件對View設(shè)置android:layout_marginStart、android:layout_marginTop
Flutter:需嵌套 Container 組件并在內(nèi)部設(shè)置具體的 margin 值
Padding內(nèi)邊距
Android:TextView、ImageView、各種Layout都可以直接在屬性上設(shè)置android:paddingStart
Flutter:需嵌套 Padding 組件并在內(nèi)部設(shè)置具體的值
組件的可見性
Android:每個view都可以通過setVisibility來設(shè)置可見、隱藏或者隱藏但占位
Flutter:沒有單獨設(shè)置組件是否顯示的api,只能通過 bool 值控制是否添加該組件
事件監(jiān)聽
Android:常規(guī)的setOnClickListener和setOnLongClickListener設(shè)置單擊和長按事件
Flutter:在需要添加事件監(jiān)聽的組件外層嵌套 InkWell 或 GestureDetector 并設(shè)置 onTap 等
3、生命周期
Android:
Activity和Fragment各自有完整的生命周期鏈路onCreate、onStart、onResume、onPause、onDestroy等
Flutter:
萬物皆組件,組件繼承 WidgetsBindingObserver 并重寫 didChangeAppLifecycleState 函數(shù)進(jìn)行監(jiān)聽
退回桌面依次執(zhí)行inactive 》= paused,此時界面不可見用戶不可操作,從桌面重新進(jìn)入app執(zhí)行resumed,狀態(tài)較少如需在某些條件下觸發(fā)特定操作可能要找別的方案,比如發(fā)通知之類的
flutter更容易學(xué),
Flutter 是 Google 開源的 UI 工具包,幫助開發(fā)者通過一套代碼庫高效構(gòu)建多平臺精美應(yīng)用,支持移動、Web、桌面和嵌入式平臺。Flutter 開源、免費,擁有寬松的開源協(xié)議,適合商業(yè)項目。
分享文章:flutter和qml,flutter百度百科
分享鏈接:http://jinyejixie.com/article8/dsecdop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、關(guān)鍵詞優(yōu)化、企業(yè)建站、ChatGPT、網(wǎng)站內(nèi)鏈、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)