Google对Flutter的解释

什么是Flutter?

Flutter是一款移动应用SDK,可通过单一代码库为iOS和Android构建高性能,高保真的应用。

目标是使开发人员能够提供在不同平台上感觉自然的高性能应用程序。我们接受滚动行为,排版,图标等方面的差异。

这是一个来自Gallery的演示应用程序,这是一组Flutter示例应用程序,您可以在安装Flutter并设置环境后运行。Shrine拥有高品质的滚动图像,交互式卡片,按钮,下拉列表和购物车页面。要查看此单个代码库以及更多示例,请访问我们的GitHub存储库。

入门无需移动开发经验。应用程序是用Dart编写的,如果您使用的是Java或JavaScript等语言,它看起来很熟悉。使用面向对象语言的经验肯定是有帮助的,但即使是非程序员也制作了Flutter应用程序!

为什么要使用Flutter?

Flutter有哪些优点?它可以帮助你:

  • 高效率

  • 从单一代码库开发iOS和Android

    • 使用更少的代码,甚至在单个操作系统上,使用现代,富有表现力的语言和声明性方法做更多事情
    • 原型并轻松迭代
  • 通过在应用运行时更改代码和重新加载进行实验(使用热重新加载) * 修复崩溃并继续从应用程序停止的位置进行调试

  • 创建美观,高度定制的用户体验

  • 受益于丰富的Material Design和使用Flutter自己的框架构建的Cupertino(iOS风格)小部件

    • 实现定制,美观,品牌驱动的设计,不受OEM小部件集的限制

核心原则

Flutter包括一个现代的反应式框架,一个2D渲染引擎,现成的小部件和开发工具。这些组件协同工作,帮助您设计,构建,测试和调试应用程序。一切都围绕一些核心原则组织。

一切都是小工具(Everything’s a Widget

)

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

小部件可以定义:

  • 结构元素(如按钮或菜单)
  • 风格元素(如字体或颜色方案)
  • 布局的一个方面(如填充)
  • 等等…

窗口小部件基于组合形成层次结构。每个小部件都嵌套在内部,并从其父级继承属性。没有单独的“应用程序”对象。相反,根小部件提供此角色。

您可以通过告知框架将层次结构中的窗口小部件替换为另一个窗口小部件来响应事件,例如用户交互。然后,框架将比较新旧窗口小部件并有效地更新用户界面。

组成>继承

小部件本身通常由许多小的,单一用途的小部件组成,这些小部件结合起来产生强大的效果。例如,Container是一个常用的小部件,由几个负责布局,绘制,定位和大小调整的小部件组成。具体来说,Container由 LimitedBox, ConstrainedBox, Align, Padding, DecoratedBox和Transform 小部件组成。您可以以新颖的方式组合这些以及其他简单的小部件,而不是将Container子类化以生成自定义效果。

类层次结构浅而宽,以最大化可能的组合数。

您还可以通过将窗口小部件与其他窗口小部件组合来控制窗口小部件的布局。例如,要将窗口小部件居中,请将其包装在“中心”窗口小部件中。有填充,对齐,行,列和网格的小部件。这些布局小部件没有自己的可视化表示。相反,他们唯一的目的是控制另一个小部件布局的某些方面。要了解窗口小部件以某种方式呈现的原因,检查相邻窗口小部件通常很有帮助。

Layer cakes are delicious

Flutter框架被组织成一系列层,每层构建在前一层上。

该图显示了框架的上层,其使用频率高于下层。有关构成Flutter分层框架的完整库集,请参阅我们的API文档。

此设计的目标是帮助您使用更少的代码完成更多工作。例如,Material层是通过从窗口小部件层组合基本窗口小部件构建的,窗口小部件层本身是通过编译渲染层中的低级对象来构建的。

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

没有什么是对你隐藏的。您可以获得高级别,统一的小部件概念的生产力优势,同时不会牺牲您在下层深入潜水的能力。

构建小部件

您可以通过实现 返回窗口小部件的树(或层次结构)的构建函数来定义窗口小部件的独特特征 。此树以更具体的术语表示小部件的用户界面部分。例如,工具栏小部件可能具有构建函数,该函数返回 某些文本和 各种按钮的水平布局。然后框架递归地要求构建这些小部件中的每一个,直到该过程在完全具体的小部件中达到最低点,然后框架将这些小部件拼接成树。

小部件的构建功能应​​该没有副作用。每当要求构建时,窗口小部件都应返回一个新的窗口小部件树,无论窗口小部件先前返回了什么。该框架大大提升了将先前构建与当前构建进行比较并确定需要对用户界面进行哪些修改。

这种自动比较非常有效,可实现高性能的交互式应用。构建函数的设计通过专注于声明构成窗口小部件的内容来简化代码,而不是将用户界面从一个状态更新到另一个状态的复杂性。

处理用户交互

如果窗口小部件的独特特征需要根据用户交互或其他因素进行更改,则该窗口小部件是有状态的。例如,如果窗口小部件具有每当用户点击按钮时递增的计数器,则计数器的值是该窗口小部件的状态。当该值更改时,需要重建窗口小部件以更新UI。

这些小部件是StatefulWidget (而不是StatelessWidget)的子类,并将其可变状态存储在State的子类中。

无论何时改变State对象(例如,递增计数器),都必须调用 setState()来通过再次调用State的构建方法来通知框架更新用户界面。有关管理状态的示例,请参阅使用每个新Flutter项目创建的MyApp模板。

具有单独的状态和窗口小部件对象允许其他窗口小部件以相同的方式处理无状态和有状态窗口小部件,而不用担心丢失状态。父母可以自由地创建孩

代码交流 2021