精华内容
下载资源
问答
  • Flutter实战(一) Flutter什么

    千次阅读 2018-04-18 11:16:02
    本篇为Flutter实战系列第一篇,先整体介绍一下Flutter,旨在让您对Flutter有一个全局感性的认识。如果您还想了解更多,可以去[Flutter中文网]...Flutter什么Flutter是谷歌的移动端跨平台UI框架,可以快速在i...

    Flutter

    本篇为Flutter实战系列第一篇,先整体介绍一下Flutter,旨在让您对Flutter有一个全局感性的认识。如果您还想了解更多,可以去[Flutter中文网](https://flutterchina.club/) 了解更多。后续教程将陆续发布,如果您对Flutter感兴趣,欢迎关注我的博客。

    Flutter是什么?

    Flutter是谷歌的移动端跨平台UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。简单来说,Flutter是一款移动应用程序SDK,包含框架、控件和一些工具,可以用一套代码同时构建Android和iOS应用,并且性能可以达到原生应用一样的性能。详情请参考Flutter简介

    Flutter用什么语言开发?

    Flutter 用Dart作为开发框架和widget的语言,详情请参考为什么Flutter选择使用Dart语言

    Dart语言好学吗?

    如果你有编程经验,尤其是了解Java或Javascript, 那么你回发现Dart学习起来非常容易,笔者只用了两个小时基本就开始愉快的使用Dart编码了。Flutter中文网编辑了一份可以帮助您快速学习Dart的Dart语言资源列表,希望对你有用。

    Flutter和React-Native、Weex这样的动态化框架有什么不同?

    React-Native、Weex核心是通过Javascript开发,执行时需要Javascript解释器,UI是通过原生控件渲染。Flutter与用于构建移动应用程序的其它大多数框架不同,因为Flutter既不使用WebView,也不使用操作系统的原生控件。 相反,Flutter使用自己的高性能渲染引擎来绘制widget。Flutter使用C、C ++、Dart和Skia(2D渲染引擎)构建。在IOS上,Flutter引擎的C/C ++代码使用LLVM编译,任何Dart代码都是AOT编译为本地代码的,Flutter应用程序使用本机指令集运行(不涉及解释器)。而在Android下,Flutter引擎的C/C ++代码是用Android的NDK编译的,任何Dart代码都是AOT编译成本地代码的,Flutter应用程序依然使用本机指令集运行(不涉及解释器)。因此,Flutter能达到原生应用一样的性能。

    同时,Flutter提供了一组自己的widget),由Flutter的framework和引擎管理和渲染。您可以浏览Flutter widget目录。之所以不适用原生控件,是因为Flutter希望最终结果是更高质量的,如果Flutter使用原生系统widget,Flutter应用的质量和性能将受到这些widget本身质量的限制。例如,在Android中,有一组硬编码的手势和固定的规则来对它们进行手势冲突消歧。在Flutter中,您可以编写自己的手势识别器,该手势识别器是手势系统中的一级参与者 。此外,由不同人撰写的两个小工具可协调手势冲突消歧。

    Flutter支持像webpack一样“热重载”或者Android “instant run”吗?

    支持,Flutter支持Hot Reload,通过将更新的源代码文件注入正在运行的Dart VM(虚拟机)中工作。这不仅包括添加新类,还包括向现有类添加方法和字段,以及更改现有函数。详情请参阅Flutter热重载

    对于程序员/开发人员来说,要使用Flutter必须具备哪些经验?

    Flutter对熟悉面向对象概念(类、方法、变量等)和命令式编程概念(循环、条件等)的程序员来说是很容易入门的。学习和使用Flutter,无需事先具有移动开发经验。 我们已经看到了一些不怎么有编程经验的人学习并使用Flutter进行原型设计和应用程序开发。

    可以在我现有的原生应用程序中使用Flutter吗?

    可以,您可以在现有的Android或iOS应用中嵌入Flutter。详情请参考原生应用程序中使用Flutter

    Flutter支持文件读取、发起网络请求吗?

    支持!详情请参考:

    1. Flutter 文件操作
    2. Flutter发起Http请求

    我在哪里可以获得Flutter学习资源?

    您可以去谷歌Flutter官网,但是,现在也可以访问Flutter中文网了,Flutter中文网 上提供了官方文档翻译和一些其它案例、资源,您也可以去Github 上Flutter项目主页,去查看最新动态和提issue.

    本文参考文档:Flutter中文网-Flutter FAQ .

    展开全文
  • 在闲鱼实习做Flutter什么感受?

    万次阅读 2019-09-03 12:12:00
    重构过程困难重重,首先是我对Flutter的认识不足,当时我甚至还不知道StatefulWidget 跟StatelessWidget的区别是什么,其次是对Fish-Redux理解不够。 这就像建楼从楼顶开始建起一样,是不可能的。 后来我决定花点...

    前言

    我是广东工业大学16级软件工程专业的学生,至今实习3个月。在闲鱼先后完成了玩家发布页重构、AndroidQ适配、租赁、直播等任务。在这短暂的三个月,依靠闲鱼,我完成了从Android到Flutter的一个技术栈的初步转移。这篇文章主要分享一下我三个月的工作学习以及心得体会。

    熟悉项目工程

    通过项目来学习,似乎是我们这一行最快的入门方法。

    在最初的一个月,师兄先让我对Flutter与Dart进行初步的学习,布置了一个使用Fish-Redux重构发布页面的任务,让我快速上手Flutter,熟悉项目工程。这个界面看起来挺简单的,但实际上他有很多复杂的交互要处理。发布页如下图所示:640?wx_fmt=png重构过程困难重重,首先是我对Flutter的认识不足,当时我甚至还不知道StatefulWidget 跟StatelessWidget的区别是什么,其次是对Fish-Redux理解不够。这就像建楼从楼顶开始建起一样,是不可能的。后来我决定花点时间,去认识各种Widget,Dart Api,Future等等。并写了一个小demo,包括了多Tab,列表,图片,网络等场景。通过这些学习,整体上大大提高了我对Flutter的认识与理解。这期间闲鱼公众号里的文章对帮助真的很大。

    当然,除了一些常见的问题,这个页面还有很多坑,因为他的交互太多了。包括页面进入自动获取Focus,点击输入框外部收起键盘,失去焦点自动检测输入并提交,点击按钮按钮,按钮变成输入框并弹出键盘等等。一开始想象的方案很美好,可惜实际写起来,事与愿违,经常遇到键盘无法弹起,键盘弹起遮挡输入,多个控件获取了焦点等等一系列问题。后来通过分析FocusNode和FocusManager的相关代码以及在师兄的帮助下,成功解决这一系列问题。这里也很感谢师兄给我足足一个月的充足的时间,让我在工作的同时,有很多空闲的时间去深入到Flutter内部去学习各种组件的原理。

    熟悉项目流程

    我在大三来闲鱼实习之前,在学校的工作室待过一段时间,也做过一些项目。工作室跟公司对比起来有着天壤之别。在学校开发的项目,没有详细的产品需求文档,交互设计全靠自己发挥,更没有测试,代码也是想到哪写到哪,导致产品的质量经常不如人意。在八月份初,我终于有机会去接触一个完整的FDD项目管理流程。下图是某业务的看板:

    640?wx_fmt=png

    各个阶段对我来说是陌生的也是充满挑战的,深刻的体会到了闲鱼项目管理的严谨和高效。其中的测试和发布是让人最紧张的一个环节了。害怕给测出低级BUG是原因之一(TC后测试用例不过的BUG就是低级BUG,我也是最近才知道)现在每次给提BUG,首先就是要去看看是不是低级BUG。640?wx_fmt=png8月份‘喜提’的两个低级BUG另外中间的各种评审,也是对我思维能力的考验,评审涉及到的各种问题,是我们估时的重要依据,考虑不周将会影响到我们后期的开发进度。

    突破与沉淀

    在这次的项目开发中,也利用自己学到的Flutter知识,对原有的框架进行优化。FDRfreshWidget是一个闲鱼内部的控件,提供了下拉刷新,上拉加载更多的能力。但是在实际使用的过程中发现体验不佳,并且在滚动时在配置较低的设备上卡顿问题表现明显。在Android中我们熟知的列表图片的优化方案包括:①三级缓存 ②滚动时不加载 ③图片质量压缩 等等。在这个订单列表的场景下卡顿的原因主要是由于滚动时触发了大量的图片加载请求导致CPU与内存占用过高,因此方案②对于解决这个问题来说是很合适的。

    优化后的方案如下:通过使用InheritedWidget缓存加载控制的标记,根据ScrollView的Notification修改标记位,底层的ImageView根据标记来决定是否加载图片,并通过上层Widget缓存整个ListView终断了build的过程,避免了不必要的rebuild。640?wx_fmt=png优化之后,内存占用降低了100多MB,同时帧率上在起始时也得到了很大的提升。同事们对这个效果表示满意。640?wx_fmt=png最终这个改动也集成到了基础代码里,为闲鱼里多个使用了FDRfreshWidget的地方提供了一个能力的增强。另外还有一些其他的基础能力的建设,包括Flutter到Weex的通信,DynamicAction能力增强等等就不多做分享了。下图总结了我在闲鱼里学到Flutter相关的所有技术。

    640?wx_fmt=png

    对于打算学习Flutter的同学提供一个初步学习的路线:

    • 学习dart语言的基本语法

    • 学习大部分基础Widget的使用方式

    • 学习各种Key的使用以及作用

    • 了解Naviagator的实现方式

    • 了解setState的过程

    • 了解Dart的异步机制

    • 了解Redux,Bloc等架构

    收获

    在阿里实习的三个月,期间还有一些有意思的活动,比如百技(为期三天的头脑风暴),各个方向大神的经验分享还有新人秀等等。总的来说在闲鱼实习的三个月,说短不短,说长不长,但是过的十分充实且有意义,他给我带来了一些思维上的转变,让我受益匪浅,让我从一个学生逐渐转变成了一个职场员工。

    再给职场新人几点建议,也是我工作中犯错的一点经验教训

    • 敢于问问题。在大型的团队协作项目里,有些问题原因可能是别人的原因导致的,还有些问题其他同学已经踩过坑了,请教其他人才是最佳的办法。当然也不能遇到问题就不思考就问,这个还需自行判断。

    • 提早暴露问题。一些项目中遇到的问题,有必要的话要尽早抛出来,同步组员,有时一切不起眼的小问题可能是导致大问题的原因。

    • 主动推进任务。在闲鱼,接到任务要主动推进,因为有的项目可能是跨多团队协作的,你不将项目当当做自己的,主动推进,别的团队更不可能帮你推进。

    • 打通任务的上下流。一个任务仅仅完成是不够的,还要注意与他相关的一些页面,有没有受到影响。

    • 多思考,多总结。

    闲鱼团队是Flutter+Dart FaaS前后端一体化新技术的行业领军者,就是现在!客户端/服务端java/架构/前端/质量工程师通通期待你的加入,base杭州阿里巴巴西溪园区,一起做有创想空间的社区产品、做深度顶级的开源项目,一起拓展技术边界成就极致!

    *投喂简历给小闲鱼→guicai.gxy@alibaba-inc.com

    640?wx_fmt=png
    640?wx_fmt=png

    更多系列文章、开源项目、关键洞察、深度解读

    请认准闲鱼技术

    展开全文
  • Flutter介绍(是什么?优势?核心?) Flutter什么? Flutter是一款移动应用程序SDK,一份代码可以同时生成iOS和Android两个高性能、高保真的应用程序。 Flutter目标是使开发人员能够交付在不同平台上都感觉自然...

    Flutter介绍(是什么?优势?核心?)


    Flutter是什么?

    Flutter是一款移动应用程序SDK,一份代码可以同时生成iOS和Android两个高性能、高保真的应用程序。

    Flutter目标是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序。它兼容滚动行为、排版、图标等方面的差异。

    无需移动开发经验即可开始使用。应用程序是用Dart语言编写的,如果你使用过Java或JavaScript之类的语言,则该应用程序看起来很熟悉。使用面向对象语言的经验绝对有帮助,但一些Flutter应用程序甚至是没有编程经验的人写的!

    Flutter有什么优势?

    1. 提高开发效率

      • 同一份代码开发iOS和Android
      • 用更少的代码做更多的事情
      • 轻松迭代
        a. 在应用程序运行时更改代码并重新加载(通过热重载)
        b. 修复崩溃并继续从应用程序停止的地方进行调试
    2. 创建美观,高度定制的用户体验

      • 受益于使用Flutter框架提供的丰富的Material Design和Cupertino(iOS风格)的widget
      • 实现定制、美观、品牌驱动的设计,而不受原生控件的限制

    核心

    Flutter包括一个现代的响应式框架、一个2D渲染引擎、现成的widget和开发工具。这些组件可以帮助您快速地设计、构建、测试和调试应用程序。

    一切皆为widget

    Widget是Flutter应用程序用户界面的基本构建块。每个Widget都是用户界面一部分的不可变声明。 与其他将视图、控制器、布局和其他属性分离的框架不同,Flutter具有一致的统一对象模型:widget。

    Widget可以被定义为: 一个结构元素(如按钮或菜单)、一个文本样式元素(如字体或颜色方案)、布局的一个方面(如填充)等等。

    Widget根据布局形成一个层次结构。每个widget嵌入其中,并继承其父项的属性。没有单独的“应用程序”对象,相反,根widget扮演着这个角色。

    可以通过告诉框架使用另一个widget替换层次结构中的widget来响应事件,例如用户交互,替换后框架会比较新的和旧的widget,并高效地更新用户界面。

    一个Widget通常由许多更小的、单一用途widget组成,这些widget结合起来产生强大的效果。例如,Container是一个常用的widget,它由多个widget组成,这些widget负责布局、绘制、定位和调整大小。具体来说,Container由 LimitedBox、 ConstrainedBox、 Align、 Padding、 DecoratedBox、 和Transform组成。 您可以用各种方式组合这些以及其他简单的widget,而不是继承容器。

    类层次结构很浅且很宽,可以最大限度地增加可能的组合数量。
    在这里插入图片描述

    分层的框架

    Flutter框架是一个分层的结构,每个层都建立在前一层之上。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4pgd7xeZ-1600937215074)(evernotecid://6FE75482-54A0-433A-9625-A01F7FEE92EC/appyinxiangcom/9896050/ENResource/p2630)]

    该图显示了框架的上层,它比下层的使用频率更高。

    这个设计的目标是帮助你用更少的代码做更多的事情。例如,Material层是通过组合来自Widget层的基本Widget来构建的, 并且Widgets层本身是通过较低级对象渲染层构建的。

    层为构建应用程序提供了许多选项。选择一种自定义的方法来释放框架的全部表现力,或者使用构件层中的构建块,或混合搭配。 我们可以实现Flutter提供的所有现成的widget,或者使用Flutter团队用于构建框架的相同工具和技术创建自己的定制widget。

    构建widget

    你可以通过实现widget的build返回widget树(或层次结构)来定义widget的独特特征。这棵树更具体地表示了用户界面的widget层次。例如,工具栏widget的build函数可能返回一个包含一些文本和各种按钮的水平布局。然后,框架递归地构建widget,直到该所有widget构建完成,然后framework将他们一起添加到树中。

    widget的构建函数一般没有副作用。每当它被要求构建时,widget应该返回一个新的widget树,无论widget以前返回的是什么。Framework会将之前的构建与当前构建进行比较并确定需要对用户界面进行哪些修改。

    这种自动比较非常有效,可以实现高性能的交互式应用程序。而构建函数的设计则着重于声明widget是由什么构成的,而不是将用户界面从一个状态更新到另一个状态的(这很复杂性),从而简化了代码。

    处理用户交互

    如果widget需要根据用户交互或其他因素进行更改,则该widget是有状态的。例如,如果一个widget的计数器在用户点击一个按钮时递增,那么该计数器的值就是该widget的状态。 当该值发生变化时,需要重新构建widget以更新UI。

    这些widget将继承StatefulWidget(而不是State)并将它们的可变状态存储在State的子类中。

    每当你改变一个State对象时(例如增加计数器),你必须调用setState()来通知框架,框架会再次调用State的构建方法来更新用户界面。

    有了独立的状态和widget对象,其他widget可以以同样的方式处理无状态和有状态的widget,而不必担心丢失状态。父widget可以自由地创造子widget的新实例且不会失去子widget的状态,而不是通过持有子widget来维持其状态。框架在适当的时候完成查找和重用现有状态对象的所有工作。

    展开全文
  • 什么Flutter是革命性的?

    千次阅读 2017-09-20 15:36:08
    译者按:在本文发布的时候,Flutter... 是什么Flutter 移动应用程序 SDK 是为开发人员提供一种创建快捷、美观的应用程序的新方式,从而摆脱过去那种千篇一律的 app,尝试过 Flutter 的人都会真的爱上它。 与任何新
       
    译者按:在本文发布的时候,Flutter 的 SDK 尚不能从中国大陆直接下载,不过我们在和本文作者沟通的时候,他表示 Google 正在考虑为国内开发者提供更便捷的下载方式。
    Flutter 是什么? 
    

    Flutter 移动应用程序 SDK 是为开发人员提供一种创建快捷、美观的应用程序的新方式,从而摆脱过去那种千篇一律的 app,尝试过 Flutter 的人都会真的爱上它。

    与任何新系统一样,用户想知道 Flutter 有什么与众不同之处,“Flutter 有什么新的或者令人兴奋的东西吗?”,这是一个合理的问题,本文将从技术的角度回答 Flutter 有什么东西让人兴奋,而且给出它为什么让人兴奋的原因。

    但首先,先讲一小段历史。

    移动开发的简史

    移动开发是一个较新的领域,开发者们开始涉足移动开发时间尚不足十年,所以移动开发的工具仍然在发展当中,这并不奇怪。

    OEM SDKs


    苹果的 iOS SDKs 发布于 2008 年,谷歌的 Android 软件开发工具包发布于 2009 年,这两种工具包基于不同的编程语言,分别是 Objective-C 和 Java。



    通过这些 SDK,你的应用可以与系统通信,以创建 UI 组件或访问系统相机。这些组件被渲染到手机屏幕,而相应的事件则被传回给组件。这个架构足够简单,但你仍然不得不为每个平台开发单独的 App,因为这些系统组件都是不一样的,更不用提开发语言的不同了。

    WebView

    第一个跨平台的框架基于 JavaScript 和 WebView,例如  Titanium 和 一系列相关的框架:PhoneGap, Apache Cordova, Ionic 等,在苹果发布 iOS 之前,他们鼓励第三方开发者为 iPhone 构建网页应用程序,因此使用 Web 技术构建跨平台应用程序是顺理成章的一步。

    你的应用程序可以创建 HTML 并将其显示在平台的 WebViews 上,请注意像 JavaScript 这样的语言很难直接与本地代码(例如服务)进行通信,因此他们会通过一个在 JavaScript 代码和原生代码的“桥梁”进行上下文切换,因为平台服务通常不会经常被调用,所以这并不会导致太大的性能问题。

    响应式视图

    像 ReactJS 或 其他 的响应式编程框架已经变得很流行了,主要是因为他们通过使用从响应式编程中借用的编程模式来简化 Web 视图的创建过程。2015 年, React Native 将响应式视图的许多优势带给了移动应用程序。

    React Native 是非常受欢迎的(这是它应得的),但是因为 JavaScript 访问了原生 UI 组件,所以它也必须经过这些“桥接器”,界面上的 UI 控件通常被频繁地访问(在动画、转化或者用户用手指“滑动”屏幕上的某些东西时,每秒被访问高达 60 次),因此这很可能会导致性能问题。

    正如 关于 React Native 的一篇文章 所说:

    这是理解 React Native 性能的其中一个关键,JS 代码和原生代码本身都是很快的,瓶颈经常发生在当我们视图从一边转向另一边时。未来构建高质量的应用程序时,我们必须将使用桥接的次数控制到最小。

    Flutter

    和 React Native 一样,Flutter 也提供响应式的视图,Flutter 采用不同的方法避免由 JavaScript 桥接器引起的性能问题,即用名为 Dart 的程序语言来编译。Dart 是用预编译的方式编译多个平台的原生代码,这允许 Flutter 直接与平台通信,而不需要通过执行上下文切换的 JavaScript 桥接器。编译为原生代码也可以加快应用程序的启动时间。

    实际上,Flutter 是唯一提供响应式视图而不需要 JavaScript 桥接器的移动 SDK,这就足以让 Fluttter 变得有趣而值得一试,但 Flutter 还有一些革命性的东西,即它是如何实现 UI 组件的?

    组件(Widgets)

    Widgets 是影响和控制应用程序的视图和界面的元素,说这些组件是移动应用中最重要的部分之一,这并不夸张,事实上,UI 表现如何,可以成就或毁掉一款 App。

    • Widgets 的外观和给人的感觉是至关重要的,Widgets 需要看起来不错,包 括各种屏幕的尺寸,也需要有自然的感觉。

    • Widgets 必须快速执行:创建或扩展 UI 控件(实例化他们的 Widgets),将其放在屏幕上,渲染他们,或者(尤其是)将其动画化。

    • 对现代的应用程序来说,Widgets 应该是可扩展和可定制的,开发人员希望能够添加讨人喜欢的新的 UI 组件,并自定义所有 Widgets 以匹配各种品牌的应有程序。

    Flutter 的系统架构包含大量赏心悦目、快速、可定制、可扩展的 Widgets。没错,Flutter 不需要使用系统 UI 组件(或 DOM WebViews),它自带了 Widgets。

    Flutter 将 UI 组件和渲染器从平台移动到应用程序中,这使得它们可以自定义和可扩展。Flutter 唯一要求系统提供的是 canvas,以便定制的 UI 组件可以出现在设备的屏幕上,以及访问事件(触摸,定时器等)和服务(位置、相机等)。

    Dart 程序(绿色)和执行数据编码和解码的原生平台代码(蓝色,适用于 iOS 或 Android)之间仍然有一个接口,但这能比 JavaScript 桥接器快几个数量级。

    将 UI 组件和渲染器移动到应用程序中确实会影响应用程序的大小。Android 上的 Flutter 应用程序的的初始大小约为 6.7M,这与类似的工具构建的最小应用程序的大小相似,您可以决定 Flutter 的优势是否值得权衡,因此本文的余下部分将讨论这些优势。

    布局

    Flutter 最大的改进之一就是它的布局,布局是基于一组规则(也称约束)来决定 UI 组件的大小和位置。

    传统上,布局使用大量可以应用于任何 UI 组件的规则。这些规则实现多种布局方法,我们就以众所周知的 CSS 布局为例(尽管 Android 和 iOS 中的布局基本相似)。CSS 具有适用于 HTML 元素(UI 组件)的属性(规则), CSS3 定义了 375 个属性。

    CSS 包含大量的布局模型,如多种箱模型、浮动元素、表、多列文本、分页媒介等。还有像 flexbox 和 grid 的布局模型在之后也被添加进去,因为开发人员和设计人员需要对布局进行更多地控制,而不得不使用表格和透明图像来获取他们想要的布局。在传统布局中,开发人员无法添加新的布局模型,因此必须将 flexbox 和 grid 添加到 CSS 中并在所有浏览器上实现。

    传统布局的另一个问题是规则可以相互影响甚至发生冲突,通常有几十种规则元素的规则应用于他们,这使得布局变慢。更糟糕的是,布局性能通常为指数性下降,因此,随着元件数量的增加,布局变慢得更快。

    Flutter 最开始是 Google Chrome 浏览器小组成员进行的实验项目,我们想看看如果我们忽略了传统的布局模式,是否可以构建更快的渲染器。几周后,我们在性能上取得了显著增长,我们发现:

    • 大多数的布局是相对简单的,例如:滚动页面上的文本,其大小和位置只取决于显示大小的固定矩形,还有一些表格,浮动元素等。

    • 大部分布局只作用于 UI 组件树的一部分,并且这子树通常使用一个布局模型,因此这些 UI 组件只需要少量的规则。

    我们意识到如果完全改变以前的布局模式,布局就可以大大被简化:

    • 每个 UI 组件都将指定自己简单的布局模型,而不是拥有可以应用于任何 UI 组件的一整套布局规则。

    • 因为每个 UI 组件都有一个更小的一套布局需要考虑,所以布局可以大量优化。

    • 为了进一步简化布局,我们几乎将所有内容都转换为 UI 组件。

    这里是用 Flutter 代码来创建的一个带有布局的简单 UI 组件。

        new Center (
        child: new Column(
        children:[
          new Text ('Hello, World!')),
          new Icon (Icons.star, color: Colors.green)
         ]
        )

    这段代码在语义上足够清晰。您可以轻松地想象它将会生成什么。运行这段代码的显示结果如下:

    Hello, World!

    在这段代码中,所有的组成部分都是一个 UI 组件,包括布局。 Center UI 组件将其子组件集中在其母组件内(如屏幕)。ColumnUI 组件垂直排列其子组件(UI 组件列表)。该列表包含一个Text和一个Icon控件(具有一个颜色属性)。

    在 Flutter 中,居中显示和 padding 都是 widgets,主题是适用于它们子组件的 UI 控件,甚至应用程序和导航也是 widgets。

    Flutter 包括很多用于布局的 widgets,不仅仅含有列,还包括行、网格、列表等。 此外,Flutter 还有一个独特的布局模型,我们称之为用于滚动的“长条布局模型 (sliver layout model)”。Flutter 中的布局非常快,可用于滚动。试想一下,滚动必须如此快速平滑,以至于让用户感觉当他们在物理屏幕上拖动时,屏幕图像就像和他们的手指相连一样。

    通过使用布局进行滚动,Flutter 可以实现高级滚动,如下所示。请注意,这些是 GIF 动画,真正的 Flutter 应用程序更加平滑。您可以(并且应该)自己运行这些应用程序,请参阅本文末尾的参考资料部分。

    在大多数情况下,Flutter 仅需一次传递即可完成布局,这意味着布局所花的时间是线性增长的,所以它可以处理大量的 widgets。Flutter 也可以利用缓存或其他功能来避免重复的布局。

    定制设计

    因为 UI 组件现在是应用程序的一部分,你可以添加新的 UI 组件,并且可以自定义现有的 UI 组件,以使其具有不同的外观或感觉,或匹配公司的品牌,移动设计的趋势正在与几年前普遍使用的千篇一律的应用程序背离,开始走向让用户愉悦的定制设计。

    Flutter 配有丰富的可定制的 Android、iOS 和 Material Design 组件(实际上,我们已经被告知 Flutter 是 Material Design 中具有最高保真度之一的实现),我们使用 Flutter 的可定制特点来构建这些组件库,以匹配多个平台上的原生组件的外观和感觉。程序开发人员可以使用相似的可定制性功能进一步调整小组件以满足他们的需求。

    更多关于响应式视图

    现有的响应式 web 视图库都引入了 虚拟 DOM,DOM 代表 HTML 的文档对象模型。JavaScript 用 DOM 提供的 API 来操纵表现为一个元素树的 HTML 文档。虚拟 DOM 是使用编程语言中的对象(在这种情况下为 JavaScript)创建的 DOM 的抽象版本。

    在响应式 Web 视图(由  ReactJS 和其他系统实现)中,虚拟 DOM 是不可变的,每次更改,所有的东西都得重建。系统将虚拟 DOM 与真正的 DOM 进行比较,生成一组最小的更改,然后执行这些更改,以更新真正的 DOM。最后,平台重新绘制真实的 DOM 到画布中。

    这听起来增加了很多额外的工作,但它是值得的,因为 操纵 HTML DOM 是非常耗费系统资源的。

    React Native 也做类似的工作,但是是在移动应用程序当中进行的。它会操控移动平台上的原生组件而不是 DOM。它构建一个 UI 组件的虚拟树,与原生组件进行比较,并只更新已更改的部件。

    请记住,React Native 必须通过桥接器与原生部件进行通信,因此,UI 组件的虚拟树可以帮助保持传递桥的最小值,同时还允许使用原生部件。最后,一旦更新了本机部件,平台就会将它们渲染到画布上。

    React Native 是移动开发的一大进步,并且是 Flutter 的灵感来源,但 Flutter 更进一步。

    回想一下,在 Flutter 中,UI 组件和渲染器已经从平台中集成到用户的应用程序中。没有系统 UI 组件可以操作,所以原来虚拟控件树的地方现在是真实的控件树。Flutter 渲染 UI 控件树并将其绘制到平台画布上。这很好,既简单又快。 此外,动画发生在用户空间中,因此应用程序(因此开发人员)可以对其进行更多的控制。

    Flutter 渲染器本身很有趣:它使用几个内部树结构来渲染只需要在屏幕上更新的 UI 组件。例如,渲染器使用“ 使用 合成的结构重绘”(这意味着比使用屏幕上的矩形区域更有效)。不变的 UI 控件,即使是那些已经移动的 UI 控件,仅需在内存中做极其细微的改动,速度当然超级快。这就是为什么 Flutter 的滚动性能如此之高,即使在很复杂的滚动场景中。

    要进一步了解 Flutter 渲染器,我 推荐这个视频。你也可以看看代码,因为 Flutter 是开源 的。当然,您可以自定义或甚至替换整个堆栈,包括渲染器,合成器,动画,手势识别器,当然还有 widgets。


    Dart 编程语言


    因为 Flutter 像使用响应式视图的其他系统一样,刷新每个新框架的视图树,它会创建许多只能在一帧(六十分之一秒)内存在的对象。幸运的是,Dart 使用“generational garbage collection ”对于这样的系统来说是非常有效的,因为对象(特别是寿命短的)消耗资源相对较少。此外,可以使用单个 pointer bump 来完成对象的分配。这是一个快速且不需要锁定的 pointer bump。这有助于避免 UI 卡顿。

    Dart 还有一个“tree shaking ”编译器,它只包含你在应用程序中需要的代码。 即使您只需要一个或两个,您也可以随意使用大型的 UI 控件库。

    热重载

    Flutter 最受欢迎的功能之一是其快速,保留程序状态的热重载 (hot reload)。 您可以在 Flutter 应用程序运行时对其进行更改,重新加载应用程序的代码,将其从之前的操作位置继续下去。一次热重载通常用不到一秒钟。 如果您的应用遇到错误,您通常可以修复错误,然后继续,就像错误从未发生过。 即使你必须完全重新加载,它也是很快速的。

    开发人员告诉我们,这可以让他们“绘制”他们的应用程序,一次更改,然后几乎立即可以看到结果,而无需重新启动应用程序。

    兼容性

    因为 UI 组件(和这些 UI 组件的渲染器)是您的应用程序的一部分,而不是平台的一部分,不需要“兼容库  ”。 您的应用程序不仅可以正常工作,而且在最近的操作系统版本 Jelly Bean 以后的安卓系统和 8.0 以后的 iOS 系统上也是一样的 。 这显著降低了在旧版本操作系统上测试应用程序的需求。 此外,你的 App 有很大可能与未来的操作系统版本兼容。

    我们曾被问到一个潜在的问题。 由于 Flutter 不使用原生 UI 组件,因此,当新的 iOS 或 Android 版本出现时,Flutter UI 组件是否需要更新才能支持新的部件,或更改现有部件的外观或行为吗?

    • 首先,Google 是 Flutter 的内部的一个大用户,所以我们有很大的动机来更新 UI 组件,使其保持最新状态并尽可能接近当前的原生 UI 组件。

    • 如果有一段时间我们在更新一个 UI 组件时太慢,Google 并不是 Flutter 唯一一个保持 UI 组件最新的用户。Flutter 的 UI 组件是可扩展和可定制的,任何人都可以更新它们,包括你自己, 甚至不需要提交一个请求。 你永远不必等待 Flutter 自己更新。

    • 只有当您想要在应用中反映出新的更改时,上述要点才适用。 如果您不想要更改影响您的应用程序的外观或工作方式,那么就没有必要使用上面所说的。 UI 组件是您的应用程序的一部分,所以 UI 永远不会在你不知情的情况下擅自改变,并使您的应用程序看起来不好(或更糟的是,破坏您的应用程序)。

    • 还有一个额外的好处,您可以编写您的应用程序,以便即使在较旧的操作系统版本上也能使用新的 UI 组件.

    其他优势

    Flutter 的简单性使其运行很快,但它的可定制性和可扩展性,保持简单的同时拥有强大功能。

    Dart 拥有一个 软件包仓库。您可以用这些软件包扩展应用程序的功能。 例如,有许多软件包可以轻松访问 Firebase,以便您可以构建“无服务器”应用程序。 外部贡献者创建了一个可让您访问  Redux data store 的软件包。 还有一些称为“ plugins ”的软件包,可以以独立于操作系统的方式轻松访问平台服务和硬件,例如加速度计或相机。

    当然,Flutter 也是一个 开放源码 的项目 ,加上 Flutter 渲染堆栈是您应用程序的一部分,这意味着您可以自定义几乎任何您想要的应用程序。 该图中绿色的部分您都可以定制:

    那么,“Flutter 有什么新鲜又令人兴奋的”呢?

    如果有人问你 Flutter,现在你知道如何回答他们了:

    • 响应式视图的优点,不需要 JavaScript 的桥接器

    • 快速,流畅,可预测 ; 代码将 AOT 编译为本机(ARM)代码

    • 开发人员完全控制 UI 组件和布局

    • 配有美观,可定制的 UI 组件

    • 强大的开发者工具,惊人的热重新加载

    • 性能更好,兼容性更好,开发起来更有乐趣

    你注意到我把什么移出这个名单吗? 这是通常人们在谈论 Flutter 时提到的第一件事,但对我来说,这是 Flutter 中最不重要的事情之一。

    这就是,Flutter 可以从单个代码库为多个平台构建漂亮而快速的应用程序。 当然这应该列出来的! 它的可定制性和可扩展性可以轻松将 Flutter 定位到多个平台,而不会牺牲性能或功耗。

    Flutter 的革命性


    我还没有完全解释为什么 Flutter 是“革命性”的。 这其实是一个很合适的评价,因为外部开发人员用 Flutter 构建的 第一个主要应用程序 之一是描述美国独立战争时期的《 汉密尔顿:美国音乐剧 》的官方应用程序。 《汉密尔顿》是百老汇最受欢迎的音乐剧之一。

    该应用的开发团队 Posse 表示,他们选择了 Flutter 是因为他们需要在 短短的三个月内 构建应用程序。 他们称之为“一个革命性表演的革命性应用程序”,并说“Flutter 是美观,高性能,品牌驱动的移动体验的绝佳选择”。该应用程序在 Android 和 iOS 的应用商店上都可下载,并且得到了越来越多的好评。

    加入革命!

    Flutter 目前是 Alpha 版本。 我们还在增加更多的功能,并且我们有更多的优化计划。 然而,Google 内部和外部的群组已经在使用它来构建任务关键型应用程序。

    如果您对 Flutter 感兴趣, 您可以 安装它,并体验 随附安装 的一些示例应用程序 , 注意一定要试一下热重载。

    如果您不是开发人员或只想看到某些应用程序,则可以安装使用 Flutter 构建的应用程序,并查看它们的外观和性能。 我推荐 汉密尔顿应用程序 ,但还有其他应用程序 。 您还应该观看来自 Google I / O 的视频 ,他们在那里直播 Flutter 应用程序的编译过程。


    网站
    • Flutter 网站:

      https://flutter.io/


    • 源存储库 (欢迎发送请求!):

      https://github.com/flutter/flutter


    原文地址:https://mp.weixin.qq.com/s/t70egA484oQqDG0BfEWsOg
    展开全文
  • Flutter

    千次阅读 多人点赞 2019-09-27 11:00:21
    作为谷歌的开源移动UI框架,Flutter可以快速在iOS和Android上构建高质量的原生用户界面,2019年,Google I/O 大会宣布了 flutter 支持 web 开发。flutter 目前的目的就是全平台开发,一套代码同时运行在 iOS 、...
  • FLUTTER

    千次阅读 2018-12-06 16:11:28
    安装FLUTTER 官方教程: https://codelabs.flutter-io.cn/codelabs/first-flutter-app-pt1-cn/index.html#1 下载Flutter的SDK...
  • Flutter什么? Flutter是一款移动应用程序SDK,一份代码可以同时生成iOS和Android两个高性能、高保真的应用程序。 Flutter目标是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序。我们兼容滚动...
  • 文章目录一、初识Flutter什么是跨平台开发 一、初识Flutter 什么是跨平台开发 简单地说,跨平台开发就是“一石二鸟”的开发技术。早期没有跨平台框架的时候,开发者必须为同一应用的各个平台(比如Android、iOS、...
  • Flutter中文文档

    千次阅读 2018-05-04 11:20:45
    Flutter什么 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、...
  • Flutter什么Flutter是Google推出的一套开源跨平台UI框架,可以快速地在Android、iOS和Web平台上构建高质量的原生用户界面。在过去的两年时间里,Flutter的更新频率是相当的快,也有很多的公司开始使用它来进行跨...
  • Flutter什么? 跨平台(Android/ios)构建移动应用程序的简单高效方式 Flutter核心只有一层轻量的C/C++代码,而上层使用了Dart语言(一种现代的、简洁的、面向对象的语言-ps:我没学直接当java来用了。。。), ...
  • flutter 提供了 print(Object object) 来向开发工具的控制 台输出日志信息 print("test"); common_utils 工具类已经将pring 封装为工具类 common_utils: ^1.1.1 使用common_utils工具类中的LogUtil //初始化设置 ...
  • 谷歌移动UI框架Flutter入门

    千次阅读 2019-07-14 17:27:35
    作为Android开发人员,很有必要学习一下Flutter,那么Flutter什么呢?它到底有什么作用呢?我们一一来揭晓。 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有...
  • Flutter 列表开发

    千次阅读 2018-06-11 15:34:52
    Flutter什么Flutter 移动应用程序 SDK 是为开发人员提供一种创建快捷、美观的应用程序的新方式,从而摆脱过去那种千篇一律的 app,尝试过 Flutter 的人都会真的爱上它。Flutter 环境搭建1.下载android studio ...
  • FlutterFlutter安装

    千次阅读 2020-07-28 11:26:58
    目录1、获取FlutterSDK2、配置环境变量3、相关命令4、开发iOS设备应用 1、获取FlutterSDK 官网https://flutter.io/sdk-archive/#macos 国内https://github.com/flutter/flutter/releases 国内的可以打开终端执行 git...
  • Flutter设置圆角边框 Flutter圆角背景

    万次阅读 2019-07-12 18:05:50
    flutter 圆角矩形边框
  • Flutter简介

    万次阅读 2017-09-07 00:04:39
    Flutter makes it easy and fast to build beautiful mobile apps. 这是Flutter项目主页上对Flutter的定义,它可以轻松、快速地构建漂亮的移动应用。 Flutter是Google使用Dart语言开发的移动应用开发框架,使用...
  • 什么flutter是未来移动技术的发展趋势

    万次阅读 多人点赞 2018-07-02 21:11:28
    其实我也并不认为flutter一定是移动技术未来的发展趋势,但是可以确定的说...下面来阐述为什么flutter是一个趋势:我们回顾移动的发展历史,从11年我开始接触Android 和 Ios开发的时候,大家用的最多的就是原生开发,...
  • Flutter基础

    千人学习 2020-04-06 15:55:55
    本课程主要介绍Flutter的核心知识。Flutter主要用于开发跨平台Android App和iOS App。主要包括Flutter的安装,Flutter布局,常用组件、Android和iOS风格的组件、手势、图像、网络、数据库等核心操作。
  • Flutter之我们需要掌握的知识点

    万次阅读 2019-05-12 22:31:01
    现在已经更新到1.5版本,下面来介绍Flutter概念、Flutter能够做什么Flutter使用什么语言开发、Flutter框架、Flutter构建原理、Flutter如何在Android与iOS运行等等。 一、Flutter什么 Flutter是Googl...
  • Flutter 与 RN对比

    千次阅读 2020-07-14 11:19:30
    Flutter什么 现在技术更新迭代真的很快,每隔几年就会出现一些新的技术。当然,Flutter出现有有一点时间了,只不过还未真是发布,但是已经有一些人在使用了。这篇文章主要内容来自我在公司内部的一次分享会,所以...
  • 原生工程接入Flutter实现混编

    千次阅读 2020-04-12 12:12:58
    前言 上半年我定的OKR目标是帮助团队将App切入Flutter,实现统一技术栈,变革成多端融合开发模式。Flutter目前是跨平台方案中最有...Flutter什么我在这里就不多说了,很多文章都有介绍,本篇文章想分享的是如何...
  • 浅谈我对Flutter的理解

    千次阅读 2020-02-17 18:53:16
    首先让我们来了解一下什么是flutter。本文结构如下: 了解flutterFlutter是什么) Flutter的开发语言 Flutter官方默认Demo的分析 1.了解Flutter Flutter是一个有Google开发的开源移...
  • flutter TextField 输入框组件

    万次阅读 多人点赞 2018-09-08 12:35:56
    TextField 顾名思义文本输入框,类似于Ios中...相信大家在原生客户端上都用过这个功能,就不在做具体介绍了,接下来还是具体介绍下Flutter中TextField的用法。 TextField的构造方法: const TextField({ Key ...
  • Flutter Progress 1 条形无固定值进度条 //LinearProgressIndicator不具备设置高度的选项,可以使用SizedBox来设置高度与宽度 SizedBox( child: LinearProgressIndicator(), height: 8.0, width: 200...
  • 跨平台技术篇 - Flutter 问题汇总

    千次阅读 2019-04-04 12:37:41
    Flutter什么? Flutter能做什么? Flutter适合谁? 对于程序员/开发人员来说,要使用Flutter必须具备哪些经验? Flutter可以构建什么类型的应用程序? 谁创造了Flutter? 谁在使用Flutter? 是什么让...
  • flutter进阶

    千次阅读 2019-08-23 16:54:19
    flutter进阶 之前调研过FN和flutter,附上调研链接: RN 调研学习(进行中) https://blog.csdn.net/a910626/article/details/87371134 flutter调研 https://blog.csdn.net/a910626/article/details/81316146 缘由 ...
  • flutter_echart 是基于Flutter Canvas 绘图思想实现的图表功能,支持饼状图、柱状图、拆线图,在2020-12-02 更新1.0.1版本
  • Flutter Interact 的 Flutter 1.12 大进化和回顾

    千次阅读 多人点赞 2019-12-13 11:54:05
    昨天谷歌为在 Flutter Interact 上为我们带来了 Flutter 1.12 ,这是 1.9.x 的版本在经历 6 次 hotfix 之后,才带来的 stable 大版本更新。该版本解决了 4,571 个报错,合并了 1,905 份 pr,同时本次发布也是 ...
  • 学习Flutter的奇妙之旅

    千次阅读 2019-01-15 21:11:33
    1.Flutter什么Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter是一款移动应用程序SDK,一份代码可以同时生成iOS和Android两个高性能、高保真的应用程序。   2....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 108,774
精华内容 43,509
关键字:

flutter是什么