百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Flutter App动态化与可视化搭建方案设计

bigegpt 2025-03-12 12:23 13 浏览

Flutter由于可以跨平台,再加上出自Google,在移动端颇受关注,有点像当初J2EE之于企业应用。Flutter主要的优势是跨平台,采用自己的Dart虚拟机和Skia渲染引擎,从而不依赖Native语言和渲染,并且支持AOT和JIT编译机制,从而性能和效果也能得到保证。其中Flutter的语言Dart与JS十分接近,其Widgets与Web Components的理念也十分相似,所以很适合Web开发思路,即支持页面动态化更新和可视化搭建。

Flutter动态化基本思路

通过定义统一的描述语言DSL(Domain Special Language,这里采用JSON,用来表示组件的结构、样式和行为),然后通过可视化平台来拖拽出JSON模板,最后将JSON模板下发到Flutter App,Flutter App内置了JS模板引擎以及DSL解析引擎,由它们将DSL解析映射为Flutter Widgets或者渲染对象。

Flutter动态化整体架构

总体架构上分为四大部分,第一部分是可视化搭建平台,负责开发DSL页面和配置数据。第二部分是低代码服务中台,提供组件保存、页面发布和数据加工能力。第三部分是面向端的接口服务,包括模板和数据接口。第四部分是端,这块是核心重点,端上需要支持一整套DSL的解析和渲染映射,并且要做好相应的优化,以保证渲染性能和效率。

通过以上分层我们了解到,核心是端的能力需要支持整个机制。后端需要配合提供开发和接口能力。

Flutter动态化机制

Flutter整体动态化方案如下图所示,开发者基于组件中心提前开发出组件和页面模板,使用者利用可视化搭建平台拖拽组件生成页面,再配置数据源,最后保存发布。页面中心会分别通知到页面模板和数据接口服务,当终端请求接口时,就可以获取到最新的页面模板以及对应的数据内容。当终端获取到DSL页面模板以及对应的数据内容时,利用预置的JS模板引擎和DSL解析引擎将DSL页面和数据合成并转换为Flutter渲染对象,从而实现页面的渲染。


页面模板接口端上可以实时获取,也可以提前下发。页面模板没有数据那么频繁更新,很适合做预加载和本地缓存,当然数据也可以适当预加载。当App启动时检测页面模板是否更新,如果更新则提前加载页面模板。同时App在运行过程中实时监听云端的消息,当页面模板有新版本时,App再拉取和更新本地的缓存。

Flutter动态化App组成

Flutter App是一个基础脚手架,包括通用工具、内置的SDK等,同时提供JS模板引擎和DSL解析引擎,可以用于将远程DSL模板映射为Flutter Widgets和Render Object。

Flutter App里面除了框架以及不经常运营的页面(如个人中心、帮助文档等)无需DSL动态下发,其他页面包括首页、频道页、信息流页面以及活动专题均采用动态下发的模式。这样用户看到的主要页面均是可以动态更新,类似Web网站一样。

Flutter动态化组件结构

组件结构根据DSL定义来生成,一般来讲主要就是布局、块、基本元素等。适合动态下发的内容是中间挖空的部分,而不是全部。这样我们主体App依然是Flutter原生开发,只有页面才需要动态化下发。

Flutter动态化DSL代码组成

DSL作为专门领域的描述语言,这里就采用JSON来描述组件的结构、样式以及行为。

这块需要细化到具体元素的详细定义,具体规则可以类比HTML与CSS以及DOM事件。一开始可以比较简单,满足基本的展现即可,以后根据实际需要再不断往上增强。

Flutter低代码搭建流程

由于DSL是一个复杂的JSON结构,可以本地写,也可以借助在线可视化工具来生成。用户在搭建页面时利用可视化工具拖拽组件到页面中,并局部调整元素(或元组),再配置基本动作和数据源来完成页面的搭建。页面发布到页面中心,接口就会监听到消息,端上取到的数据将是动态的内容。

最后

通过这种方式,我们基本实现了一套Flutter动态化下发方案,从而解决App改动依赖发版的问题。这种模式对于页面改版、运营增强以及Bug修复等都将变得便利。但要注意的是,不能让App整体动态化,那样存在被应用商店封杀的危险。再有,动态化方案不是万能的,毕竟App模式属于软件模式,与Web模式本质上不同。

关于App动态化方案,国外国内也有很多的方案,从Hybird、ReactNative到小程序、PWA等,但都不完善,相对来讲这种DSL模式似乎更加合适一些。关于Flutter动态化方案,一些互联网大厂也都有类似的开源项目,但也都没有完美的方案,因此对于有能力的企业来说,摸索和搭建一套适合自己业务场景的动态化方案是值得做的。

相关推荐

最全的MySQL总结,助你向阿里“开炮”(面试题+笔记+思维图)

前言作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上...

Redis数据库从入门到精通(redis数据库设计)

目录一、常见的非关系型数据库NOSQL分类二、了解Redis三、Redis的单节点安装教程四、Redis的常用命令1、Help帮助命令2、SET命令3、过期命令4、查找键命令5、操作键命令6、GET命...

netcore 急速接入第三方登录,不看后悔

新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢。如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下:https://oauthlogin.net/前言此次带来得这个小项目是...

精选 30 个 C++ 面试题(含解析)(c++面试题和答案汇总)

大家好,我是柠檬哥,专注编程知识分享。欢迎关注@程序员柠檬橙,编程路上不迷路,私信发送以下关键字获取编程资源:发送1024打包下载10个G编程资源学习资料发送001获取阿里大神LeetCode...

Oracle 12c系列(一)|多租户容器数据库

作者杨禹航出品沃趣技术Oracle12.1发布至今已有多年,但国内Oracle12C的用户并不多,随着12.2在去年的发布,选择安装Oracle12c的客户量明显增加,在接下来的几年中,Or...

flutter系列之:UI layout简介(flutter-ui-nice)

简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。在flutter中,基本上所有的对象都是wi...

Flutter 分页功能表格控件(flutter 列表)

老孟导读:前2天有读者问到是否有带分页功能的表格控件,今天分页功能的表格控件详细解析来来。PaginatedDataTablePaginatedDataTable是一个带分页功能的DataTable,...

Flutter | 使用BottomNavigationBar快速构建底部导航

平时我们在使用app时经常会看到底部导航栏,而在flutter中它的实现也较为简单.需要用到的组件:BottomNavigationBar导航栏的主体BottomNavigationBarI...

Android中的数据库和本地存储在Flutter中是怎样实现的

如何使用SharedPreferences?在Android中,你可以使用SharedPreferencesAPI来存储少量的键值对。在Flutter中,使用Shared_Pref...

Flet,一个Flutter应用的实用Python库!

▼Flet:用Python轻松构建跨平台应用!在纷繁复杂的Python框架中,Flet宛如一缕清风,为开发者带来极致的跨平台应用开发体验。它用最简单的Python代码,帮你实现移动端、桌面端...

flutter系列之:做一个图像滤镜(flutter photo)

简介很多时候,我们需要一些特效功能,比如给图片做个滤镜什么的,如果是h5页面,那么我们可以很容易的通过css滤镜来实现这个功能。那么如果在flutter中,如果要实现这样的滤镜功能应该怎么处理呢?一起...

flutter软件开发笔记20-flutter web开发

flutterweb开发优势比较多,采用统一的语言,就能开发不同类型的软件,在web开发中,特别是后台式软件中,相比传统的html5开发,更高效,有点像c++编程的方式,把web设计出来了。一...

Flutter实战-请求封装(五)之设置抓包Proxy

用了两年的flutter,有了一些心得,不虚头巴脑,只求实战有用,以供学习或使用flutter的小伙伴参考,学习尚浅,如有不正确的地方还望各路大神指正,以免误人子弟,在此拜谢~(原创不易,转发请标注来...

为什么不在 Flutter 中使用全局变量来管理状态

我相信没有人用全局变量来管理Flutter应用程序的状态。毫无疑问,我们的Flutter应用程序需要状态管理包或Flutter的基本小部件(例如InheritedWidget或St...

Flutter 攻略(Dart基本数据类型,变量 整理 2)

代码运行从main方法开始voidmain(){print("hellodart");}变量与常量var声明变量未初始化变量为nullvarc;//未初始化print(c)...