热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个关于Flutter入门的非官方Q&A

本文内容可能存在偏见、疏漏或错误,欢迎贡献您的问题及答案。建议参阅官方FAQ以获得更多信息。Q:Flutter能解决什么样的问题?Flutter允许你用同一个代码库同时编写iOS和

本文内容可能存在偏见、疏漏或错误,欢迎
贡献您的问题及答案

建议参阅
官方FAQ以获得更多信息。

Q: Flutter能解决什么样的问题?

Flutter允许你用同一个代码库同时编写iOS和Android上的原生应用。

在今年的Google I/O上,Flutter可能会推出将同一代码库扩展到Web上的方案。

相比传统前端项目,在Web上运行的Flutter应用可以获得更好的表现力

Q: Flutter能运行在哪些平台上?

目前官方支持的平台包括iOS和Android,并且即将发布对Web平台的官方支持。

此外也存在把Flutter运行在桌面平台上的实验性项目。

也有开发者成功把Flutter运行在树莓派上。

Q: Flutter与其他跨平台开发方案有什么区别?

按照官方的说法,Flutter允许你控制屏幕上的每一个像素。

因此总体来说,Flutter可以赋予开发者更强的表现力。

与一些使用原生组件的方案(例如React Native)相比,Flutter并不使用原生组件,从而隔离了不同平台上原生组件API的区别。理想情况下,Flutter项目的代码可以不必修改而直接编译到不同平台上。

与直接使用Web技术的方案(例如PWA和嵌入web view)相比,Flutter项目可以被编译到平台的原生代码,因此可以很容易地获得更高的性能和更自由的视觉效果。

与其他一些完全控制显示的方案(例如Unity3D)相比,Flutter专注于UI实现,因此学习成本更低。

Q: 从整个系统的角度,Flutter为我做了哪些事?

Flutter提供了一个对渲染层的统一抽象。

《一个关于Flutter入门的非官方Q&A》
《一个关于Flutter入门的非官方Q&A》

从这个角度上看,Flutter在功能上比起大部分UI框架更接近于Unity3D这类游戏框架,同时又保持了UI框架较低的学习成本。

同时,受益于Dart语言,Flutter框架有极高的开放性。开发者甚至可以在应用运行时修改框架本身(上图中绿色的部分),然后在几秒内看到自己修改的影响。这给用户定制自己的Flutter发行版提供了方便。

Q: Flutter包括哪些基本概念?

较为基础的概念包括Widget,Element和Render Object。

开发者只要会使用Widget就可以完成一个应用

Q: Flutter的基本概念之间是怎样互动的?

开发者通过创建和设置Render Object告诉Flutter自己希望在屏幕上渲染哪些像素,通过创建Widget告诉Flutter自己希望界面上存在哪些Render Object。Flutter用Element记录Widget和Render Object之间的关系。

由于可以通过Widget创建和设置Render Object,在大部分情形下,开发者可以通过Widget实现所有需求,不需要直接使用Render Object。但是,了解Render Object的存在有利于开发者理解错误信息。

由于Render Object负责渲染,所以Render Object之间需要进行交互以决定不同Render Object所占据的视图尺寸。不同类型的Render Object中可能有不同的布局算法,因此Render Object在与另一个Render Object交互时需要掌握对方类型的知识,并提供对方所需要的数据类型。如果Render Object不了解自己将要交互的Render Object的类型,应用就会出错。这部分错误目前无法被Dart的类型检查捕获,只能从文档中了解并在运行时发现。如果发现Render Object丢出错误,可能是使用了布局算法不兼容的Widget。

Widget是不可变的。为了通过不可变的Widget操作可变的Render Object,Flutter内部使用Element记录Render Object的状态信息。通过不断创建存有不同数据的Widget,用户可以向Flutter要求自己所需要的界面,也就是声明式的UI编程,类似XML或者HTML。

Q: 我来自React社区,怎样把我的知识复用到Flutter上?

很多Flutter应用中的概念可以在React中找到对应的设计。

  • Widget:对应React.ReactElement。
  • State:对应React.Component。
  • Render Object:对应HTML或者CSS。

State是有状态Widget中保存状态的部分,参见StatefulWidget

Q: Widget是不可变的,为什么会出现有状态组件(StatefulWidget)?

StatefulWidget里面包含一个创建State的工厂方法,工厂方法仍然不可变,而方法返回的State是可变的。

Q: 运行在Web平台上的Flutter,会比原生Web应用(React/Angular/Vue…)更慢吗?

Web平台上的Flutter还没有发布,只是透露了一些技术信息。从已知的信息来看,Web平台上的Flutter可能会比原生Web应用更流畅。
Flutter的一些开发者来自于Chromium项目,因此一些影响Web性能的设计(例如复杂的布局算法)在Flutter中被避免了

Q: Flutter中怎样实现动画?

如上所述,Flutter的布局效率非常高,因此可以每帧进行一次布局来实现动画。

与Web及其他很多平台上的transform类似,Flutter也支持在完成布局的组件像素的坐标上应用线性变换达到不同的渲染效果。因为不需要调用布局算法,这样实现动画往往可以获得更高的性能。

Q: 听说Flutter的最初发布是在14年,现在只是改了个名字?

Flutter公开发布于2017年,之前只有原型存在。作为对照,React的原型在11年出现,13年才开源。
通过原型判断软件项目的前途,意义不大。

Q: 为了跟踪Flutter的新闻,我应该关注哪些地方?

Flutter的Reddit https://www.reddit.com/r/FlutterDev/
官方YouTube频道 https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw
各种Awesome Flutter收集者 https://www.google.com/search?q=awesome+flutter
Medium上的收集 https://medium.com/flutter-community
当然,还是要推荐一下本文所在的专栏 https://zhuanlan.zhihu.com/unifrontend


推荐阅读
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
author-avatar
瓯源鞋楦头尾自动修平机
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有