Flutter调研

Flutter调研

调研背景

​ ***。

1.Flutter

1. 1认识Flutter
  • Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。
1.2理念架构
  • Flutter 主要分为 Framework 和 Engine,我们基于Framework 开发App,运行在 Engine 上。Engine 是 Flutter 的独立虚拟机。
    • Framework

      ​ Flutter的顶层是用drat编写的框架(SDK),它实现了一套基础库,包含Material(Android风格UI)和Cupertino(iOS风格)的 UI界面,下面是通用的Widgets(组件),之后是一些动画、绘制、渲染、手势库等。这个纯 Dart实现的 SDK被封装为了一个叫作 dart:ui的 Dart库。在使用 Flutter写 App的时候,直接导入这个库即可使用组件等功能。

    • Engine

      ​ Skia是Google的一个 2D的绘图引擎库,其前身是一个向量绘图软件,Chrome和 Android均采用 Skia作为绘图引擎。Skia提供了非常友好的 API,并且在图形转换、文字渲染、位图渲染方面都提供了友好、高效的表现。Skia是跨平台的,所以可以被嵌入到 Flutter的 iOS SDK中,而不用去研究 iOS闭源的 Core Graphics / Core Animation。Android自带了 Skia,所以 Flutter Android SDK要比 iOS SDK小很多。第二是Dart 运行时环境; 第三文本渲染布局引擎。

在这里插入图片描述

2.语言比较

解决方案ReactNativeWeexFlutterHybrid App
平台实现JavaScriptJavaScript无桥接,原生编码无桥接,原生编码
引擎JSCoreJS V8Flutter engine原生渲染
核心语言ReactVueDartJava/Obeject-C
上手难度(原生角度)较高一般一般容易
框架程度较重较轻-
特点适合开发整体App适合单页面适合开发整体App适合开发整体App
社区丰富,FaceBook重点维护有点残念,托管apache刚出道,拥护者众多丰富
线上动态性
跨平台支持Android、iOSAndroid、iOS、WebAndroid、iOSAndroid、iOS
2.1.主流框架的对比
  • Cordova:Cordova还是基于网页技术进行包装,利用插件的形式开发移动应用的, 性能和体验较差。

  • React Native: RN的效率由于是将View编译成了原生View,所以效率上要比基于Cordova的HTML5高很多,但是它也有效率问题,RN的渲染机制是基于前端框架的考虑,复杂的UI渲染是需要依赖多个view叠加.比如渲染一个复杂的ListView,每一个小的控件,都是一个native的view,然后相互组合叠加.想想此时如果我们的list再需要滑动刷新,会有多少个对象需要渲染.所以RN的列表方案不友好。

2.2 flutter优点
  • 热重载(Hot Reload),利用Android Studio直接一个ctrl+s就可以保存并重载,模拟器立马就可以看见效果,相比原生冗长的编译过程强很多;
  • 一切皆为Widget的理念,对于Flutter来说,手机应用里的所有东西都是Widget,通过可组合的空间集合、丰富的动画库以及分层课扩展的架构实现了富有感染力的灵活界面设计;
  • 借助可移植的GPU加速的渲染引擎以及高性能本地代码运行时以达到跨平台设备的高质量用户体验。 编写的应用是可以达到120fps(每秒传输帧数), 性能极高, 最终结果就是利用Flutter构建的应用在运行效率上会和原生应用差不多,官方宣称Flutter甚至会超过原生性能。
  • 现在Flutter至少可以跨4种平台,甚至支持嵌入式开发。我们常用的有Linux、Android、IOS,甚至可以在谷歌最新的操作系统上Fuchsia进行运行,经过第三方扩展,甚至可以跑在MacOS和Windows上,到目前为止,Flutter算是支持平台最多的框架了,良好的跨平台性,直接带来的好处就是减少开发成本。
  • 闭环了渲染过程,保证了视图渲染在 Android 和 iOS 上的高度一致性。
2.3 flutter缺点
  • 不支持热更新;
  • 包大小提升:使用Flutter后应用包大小会明显提升
  • 生态相对弱:Flutter作为新技术在第三方库数量相对较少
  • dart语言编写,掌握该语言的开发者很少。脱离不开原生,开发人员需要具备原生(Android、iOS)基础开发能力;
  • 适配问题,开发工具版本升级后,修改量大;
  • Flutter packages和Dart packages上第三方sdk繁杂,适配性差,不可乱用;

3.Flutter框架整体架构

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

img

4.Flutter动态化DSL代码组成

​ DSL作为专门领域的描述语言,这里就是用JSON来描述组件的结构、样式以及行为,可以类比HTML与CSS和事件。这块需要细化到具体元素的详细定义,能实现的能力一开始不宜过多,而是越简单越好,渐渐变得丰富。具体定义可以参考HTML,主要是视图布局和基本元素,以及一些行为。这里一开始可以比较简单,满足基本的展现即可。以后根据实际需要再不断往上增强。

img

5.Flutter低代码搭建流程

img

5.1.设计模式:MVVM(Model-View-ViewModel)

view层调用viewmodel,viewmodel通知model层,model再发送请求返回给viewmodel,viewmodel处理请求返回结果并刷新view

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HQcfMFsE-1641550307005)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps30CD.tmp.jpg)]

6.Flutter系统要求

  • 操作系统: Windows 7 或更高版本 (64-bit) / ios
  • 磁盘空间: 400 MB (不包括Android Studio的磁盘空间).
  • 工具
    • Git for Windows (Git命令行工具)(手动添加C:\Program Files\Git\binPath系统环境变量中)

7…Flutter环境搭建

  • 下载Fultter https://docs.flutter.dev/development/tools/sdk/releases#windows

  • 安装Android Studio及相关组件 (https://developer.android.com/studio/index.html)(需连接外网)

  • Android Studio安装dart和flutter组件(需连接外网)

  • 启动 Android Studio>Tools>Android>AVD Manager 并选择 Create Virtual Device.(需连接外网),

    需要注意的点:window系统只可以创建安卓虚拟机,ios系统可以安装苹果和安卓虚拟机

7.1创建虚拟机

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

flutter doctor #flutter环境检测

在这里插入图片描述

7.2启动示例
flutter creat #app名称

在这里插入图片描述

7.3可视化搭建平台调用(Flutter DevTools)
7.3.1调用

在这里插入图片描述

7.3.2页面示例

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

7.4相关功能代码示例
// http连接接口
class WorldTime {
  void getDate() async {
    // http request
    Response response =
        await get('https://jsonplaceholder.typicode.com/todos/1');
    print(response.body);
    Map data = jsonDecode(response.body);
    print(data);
  }
    
  //连接数据库&查询
  Future Database(userId) async {
    try {
      var settings = new mysql.ConnectionSettings(
          host: '10.2.10.17',
          port: 3306,
          user: 'root',
          password: '*******,
          db: 'cdscp_trunk');
      var conn = await mysql.MySqlConnection.connect(settings);
      var results = await conn.query(
          'select * from account_customer_user where user_id = ?', [userId]);
      print(results);
      await conn.close();
      Fluttertoast.showToast(msg: '$results');
    } catch (e, m) {
      print(e);
      print(m);
    }
  }

示例打印
在这里插入图片描述
借鉴地址:https://baijiahao.baidu.com/s?id=1713331377856188969&wfr=spider&for=pc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值