跨平臺高手必修課--Flutter動態(tài)化解決方案實(shí)戰(zhàn)
Flutter動態(tài)化
Flutter動態(tài)化是一個(gè)復(fù)雜的主題,它涉及到使用Flutter框架去加載和運(yùn)行動態(tài)生成的代碼或者是在運(yùn)行時(shí)更改UI。目前Flutter生態(tài)中沒有完全成熟的動態(tài)化方案,但是有一些實(shí)驗(yàn)性的項(xiàng)目可以考慮使用,例如:
Code Push: 使用Flutter的熱重載功能進(jìn)行快速迭代。
Tree Shaking: 利用Dart編譯時(shí)的Tree Shaking特性,在構(gòu)建時(shí)排除未使用的代碼。
Isolates: 通過Dart的Isolates在運(yùn)行時(shí)創(chuàng)建獨(dú)立的執(zhí)行環(huán)境。
Dart VM Service: 使用Dart VM的服務(wù)WebSocket接口進(jìn)行動態(tài)加載和執(zhí)行。
對于動態(tài)化UI,可以考慮使用以下方法:
InheritedWidget: 通過更新InheritedWidget的狀態(tài)來動態(tài)更新UI。
Streams: 使用Streams和StreamBuilder來響應(yīng)異步事件更新UI。
ChangeNotifier: 使用ChangeNotifier和ValueListenableBuilder來響應(yīng)數(shù)據(jù)變化更新UI。
Flutter由于可以跨平臺,再加上出自Google,在移動端頗受關(guān)注,有點(diǎn)像當(dāng)初J2之于企業(yè)應(yīng)用。Flutter主要的優(yōu)勢是跨平臺,采用自己的Dart虛擬機(jī)和Skia渲染引擎,從而不依賴Native語言和渲染,并且支持AOT和JIT編譯機(jī)制,從而性能和效果也能得到保證。其中Flutter的語言Dart與JS十分接近,其Widgets與Web Components的理念也十分相似,所以很適合Web開發(fā)思路,即支持頁面動態(tài)化更新和可視化搭建。
總體架構(gòu)上分為四大部分,第一部分是可視化搭建平臺,負(fù)責(zé)開發(fā)DSL頁面和配置數(shù)據(jù)。第二部分是低代碼服務(wù)中臺,提供組件保存、頁面發(fā)布和數(shù)據(jù)加工能力。第三部分是面向端的接口服務(wù),包括模板和數(shù)據(jù)接口。第四部分是端,這塊是核心重點(diǎn),端上需要支持一整套DSL的解析和渲染映射,并且要做好相應(yīng)的優(yōu)化,以保證渲染性能和效率。