首页 > 其他分享 >flutter入门1——概念简介

flutter入门1——概念简介

时间:2024-03-07 11:47:14浏览次数:17  
标签:原生 widget 入门 渲染 简介 flutter 引擎 js Flutter

简介

Flutter是Google开发的一个开源移动应用框架,用于构建高性能、高保真的跨平台应用。它使用Dart语言作为开发语言,具有许多独特的特点和优势。

特点

  1. 跨平台性:Flutter支持Android和iOS两大主流移动平台,开发者可以使用同一套代码库来构建应用,大大减少了开发和维护的成本。
  2. 高性能:Flutter使用自己的渲染引擎来绘制界面,而不是依赖原生系统的渲染机制。这使得它在性能上接近甚至超过原生应用。
  3. 热重载:Flutter的热重载功能允许开发者在无需重新启动应用的情况下实时预览代码更改,极大地提高了开发效率。
  4. 自定义UI:Flutter提供了丰富的widget和API,使得开发者可以轻松构建出富有表现力和灵活的设计。

能力

  1. 响应式框架:Flutter的响应式框架使得应用界面能够根据不同的屏幕尺寸、分辨率和平台特性进行自适应。
  2. 插件支持:通过Flutter的插件体系,开发者可以访问平台本地API,如相机、蓝牙、Wi-Fi等,实现更丰富的功能。
  3. 动画和效果:Flutter提供了强大的动画和效果支持,使得应用界面更加生动和吸引人。

原理

Flutter的原理主要基于其自有的渲染引擎。它使用Dart语言编写的代码来构建应用的UI界面,并通过一套高效的渲染管道将其渲染到屏幕上。这种渲染方式不依赖于原生系统的渲染机制,因此可以实现跨平台的统一体验。

与其他混合app框架的对比:

与React Native、Ionic等其他混合app框架相比,Flutter在性能和跨平台一致性方面表现更出色。React Native虽然也支持跨平台开发,但其性能依赖于JavaScriptCore或Hermes等JavaScript引擎,而Flutter则使用自己的Dart VM和渲染引擎,因此在性能上有一定优势。此外,Flutter的widget系统使得其UI在不同平台上的表现更加一致,减少了因平台差异导致的UI不一致问题。

然而,Flutter也有其局限性。由于它使用自己的渲染引擎和widget系统,学习成本相对较高,对于习惯使用原生开发或React Native等框架的开发者来说可能需要一定的适应期。此外,虽然Flutter支持跨平台开发,但在某些特定场景下可能仍然需要原生开发的支持。

 

flutter 原理类似跨端“2D 游戏殷勤”

一块画布(SGL),使用Dart语言编写Framework制定的API,由Framework调用

Engine层实现绘制,Embedder层负责跨端运行和渲染。

我们知道rn和weex,也是原生渲染的,它们的性能高于webvieew。但同为原生渲染的,怎么会

慢于flutter呢?其实不是原生渲染慢,而是js和原生通信慢。

rn和weex都采用了独立的js引擎(iOS是jscore, Android是v8,最新版m开始在Android上搞自

己的js引擎Hermes),从js与dart的比较上,性能稍逊一筹。但这不是是主要问题,因为v8的jit不

是盖的,也是编译为原生代码解析的。性能上的主要问题是,rn、weex的js引擎和原生渲染层是

两个运行环境。

当js引擎联网获取到数据后,通知原生视图层更新界面时,有一个跨不境的通信折损。同样,当

用户在屏幕上操作原生视图层时,要给js引擎发送通知,也会产生这个通信折损。

不过这种性能差别,在大多数场景中,用户是感受不到的。比较影响的场景,是跟手式的js响应

操作绘制帧动画,或者说js连续操作界面元素方面,flutter折损更少

这个通信折损,其实普遍存在于所有逻辑和视图分离的相框架中,包括各家小程序也有这个问题

flutter 架构和渲染机制

Flutter的劣势

  • 混合开发
  • 热更新
  • 内存占用
  • 体积

查看文档的基本概念

  • 一切皆是Widgets
  • 多组件容器(Row、Column、Stack、Wrap)
  • 单组件容器(Container、Padding、Center、Align)
  • Futter组件的规律

Widgets

状态

stateful和stateless:实现Flutter app时,我们用用widgets来构建app的UI。这些widgets有两种

类型--stateful(有状态)和stateless(无状态)

stateless:当创建的widget不需要管理理任何形式的内部state时,则使用用StatelessWidget。

eg: Text

stateful:当创建一一个能随时间动态改变的widget,并且不不依赖于其初始化状态。eg:Image

注意:

1创建一个Stateful Widget需要两个类,分别继承自StateFulWidgeet和State;

2state对象包含了widget的state和widget的build()方法;

3当widget的state改变了的时候,当调用setState()方法时,相架就会去调用build方法重绘

widget;

 

 

 

 

标签:原生,widget,入门,渲染,简介,flutter,引擎,js,Flutter
From: https://www.cnblogs.com/beileixinqing/p/18058534

相关文章

  • Subversion svn 开源的版本控制系统入门介绍 VCS
    拓展阅读Subversion开源的版本控制系统入门介绍VCSGit开源的版本控制系统-01-入门使用介绍Git开源的版本控制系统-02-baseusage基本用法Git开源的版本控制系统-03-时间数据回溯Git开源的版本控制系统-04-branchmanage分支管理Git开源的版本控制系统-05-tags标签......
  • TIDB简介及TIDB部署、原理和使用介绍
    从MySQL架构到TiDB数据库分类​介绍TiDB数据库之前,先引入使用场景。如今的数据库种类繁多,RDBMS(关系型数据库)、NoSQL(NotOnlySQL)、NewSQL,在数据库领域均有一席之地,可谓百家争鸣之势。那么为什么要使用TiDB呢?接下来就从最熟悉的MySQL的使用说起。MySQL痛点​假设现在有一个高速......
  • 【Flink入门修炼】2-2 Flink State 状态
    什么是状态?状态有什么作用?如果你来设计,对于一个流式服务,如何根据不断输入的数据计算呢?又如何做故障恢复呢?一、为什么要管理状态流计算不像批计算,数据是持续流入的,而不是一个确定的数据集。在进行计算的时候,不可能把之前已经输入的数据全都保存下来,然后再和新数据合并计算。......
  • Flutter创建项目
    Flutter环境配置直接看文档,很详细,官方建议用stable多用 flutterdoctor-v指令,看看是否有环境异常网络的话,还是建议有科学工具,能省不少麻烦项目目录结构个人觉得还是比较重要,方便维护和扩展,Flutter项目的目录结构通常具有以下常见组织:android/:这个目录包含了与A......
  • Flutter
    简述:时隔多年,又捡起了Flutter,粗略对比了一下ReactNative,总体来说,相差不是特别大,性能方面原生组件的ReactNative可能会更好一些,但是想想,现在设备都这么强悍,而且Flutter生态这些年也强大了不少,还是选择Flutter,根据文档描述来看,还是一整套下来的比较方便开发.整理......
  • 19_W25Q64简介
    W25Q64简介介绍硬件电路W25Q64框图Flash操作注意事项最小擦除单元->一个扇区软件SPI读写W25Q64接线图代码MySPI.c#include"stm32f10x.h"//DeviceheadervoidMySPI_W_SS(uint8_tBitValue){ GPIO_WriteBit(GPIOA,GPIO_Pin_4,(BitAction)......
  • Salesforce入门级认证!App Builder备考指南
    AppBuilder认证适用于具有在Lightning平台上开发自定义应用程序的经验的个人,备考者通常需要有6个月到1年在Lightning平台或类似技术平台上构建应用程序的经验。AppBuilder认证对备考者的要求AppBuilder认证验证了备考者在数据建模与管理、流程自动化、用户界面、应用开发......
  • kubernetes可视化管理工具KubePi体验简介
    kubernetes可视化管理工具KubePi体验简介原创 zhuhb 运维笔谈 2024-03-0111:55 上海 听全文推荐一个飞致云开源的kubernetes可视化面板KubePi,Github地址https://github.com/1Panel-dev/KubePiKubePi可以导入多个Kubernetes集群,并且通过权限控制,将不同cluster......
  • Gorm简单入门
    Gorm简单入门介绍简单的数据库连接和CRUD内容0.基本配置goget-ugorm.io/gormgoget-ugorm.io/driver/mysql1.连接数据库packagemainimport( "time" "gorm.io/driver/mysql" "gorm.io/gorm")typeUserstruct{ IDuint Namestring......
  • 网络安全入门(持续更新...)
    第零章网络安全概述网络安全是什么网络安全基本要素(CIA)机密性(Confidentiality):确保一些重要信息/敏感数据不会被未授权访问(不会被窃取);完整性(Integrity):确保数据在传输过程中不会被篡改;可用性(Availability):确保已授权人员可以正常获取数据;网络安全关心什么网络通信安全:......