Fluttrer了解一下?

Flutter-manual

Flutter是谷歌旨在帮助开发人员和设计师用于在iOS和Android平台上以最快的速度构建高质量原生应用的一个移动应用SDK。Flutter可以与现有的代码一起工作,如今已经被世界各地的开发人员和组织使用,并且它是免费的以及开放源代码的。

目前还处于测试阶段。

简单来说,就是谷歌推出的一个移动UI框架,用来开发安卓和苹果两个平台的应用,目前是测试阶段,相信不久就会有正式版。

Flutter介绍

1、Flutter能做什么?

对于用户来说,Flutter使漂亮的应用程序UI变得生动起来。

对于开发者来说,Flutter降低了开发移动应用程序的门槛。它加快了移动应用程序的开发速度,降低了iOS和Android应用程序生产的成本和复杂性。对于设计师来说,Flutter可以在不丧失忠诚度或妥协的情况下,实现最初的设计愿景。它也是一种有效的原型工具。

2、Flutter为谁而生?

Flutter是针对那些想要更快地构建漂亮的移动应用程序的开发者,或者是一种用一次投入就能接触到更多用户的方法。

Flutter也适用于需要领导移动开发团队的工程经理。Flutter允许项目工程管理人员组建一个单一的移动应用程序开发团队,统一他们的开发投入,以更快地时间发布更多功能,同时向iOS和Android发布相同的功能集,并降低维护成本。

虽然不是最初的目标受众,Flutter也是为那些希望他们的原始设计愿景以高保真度一致地传递给所有手机用户的设计师们设计的。从根本上说,Flutter是为那些想要使用漂亮的应用程序的用户准备的,这些应用程序具有令人愉快的动作和动画,用户界面具有自己的个性和身份。

3、一个有经验的程序员/开发者如何使用Flutter?

对于熟悉面向对象概念(类、方法、变量等)和命令式编程概念(循环、条件句等)的程序员来说,Flutter是容易上手的。

并不需要事先的移动开发经验就可以学习和使用Flutter。

我们看到有很少编程经验的人在原型和应用程序开发中学习和使用Flutter。

4、我们用Flutter可以构建哪些应用程序?

Flutter是针对2D移动应用程序进行优化的,这些应用程序想要同时在Android和iOS上运行。

需要提供品牌门面设计的应用程序特别适合Flutter。然而,需要看起来像应用股票平台的应用程序也可以用Flutter构建。

您可以使用Flutter构建功能齐全的应用程序,包括照相机、地理定位、网络、存储、第三方SDK等等。

5、Flutter由谁发布维护的?

Flutter是一个开源项目,来自Google和社区的贡献。

6、目前谁在使用Flutter?

谷歌使用Flutter为iOS和Android开发关键业务应用程序。例如,谷歌的移动销售工具应用程序是用Flutter构建的,同时还有一个用于谷歌购物快车的商店经理应用程序。其他的Flutter应用程序正在开发中。

7、Flutter构建的方式为什么是独特的?

Flutter与大多数其他构建移动应用程序的选项不同,因为它既不使用WebView,也不使用随设备附带的OEM小部件。取而代之的是,Flutter使用自己的高性能渲染引擎来绘制小部件。

此外,Flutter是不同的,因为它只有一层很薄的C/C+代码层。Flutter用Dart(一种现代的、简洁的、面向对象的语言)实现了它的大部分系统(合成、手势、动画、框架、小部件等),开发人员可以轻松地阅读、更改、替换或删除这些功能。这使开发人员对系统有了极大的控制,并且大大降低了系统大多数的可接近性。

8、下一个应用程序我需要使用Flutter吗?

Flutter仍在发展中,尚未达到1.0阶段。但在谷歌内部使用的是Flutter,使用Flutter构建的应用程序部署到用户使用的产品中。产品中展示了一些示例应用程序:https://flutter.io/showcase/

一些关键的功能还没有完成,但是已经完成的功能通常是高质量的并且可以使用。

我们的API保持稳定,我们继续根据用户的反馈改进系统的某些部分。当我们做出可能会影响到我们用户的更改时,我们会发邮件给[email protected]

Flutter内部

1、Flutter SDK内部有哪些?

  • 高度优化,移动优先的2D渲染引擎与支持优秀的文本
  • 现代反应式框架
  • 用于Android和iOS的丰富的widgets
  • 用于单元测试和集成测试的API
  • 连接到系统和第三方SDK的Interop和插件api
  • 用于在Windows、Linux和Mac上运行测试的无头测试运行器
  • 用于创建、构建、测试和编译应用程序的命令行工具

2、Flutter可以在哪些编辑器IDEs工作?

我们为Android Studio、IntelliJ IDEA和VS Code提供了构建插件。

请参阅编辑器配置以获得安装细节,以及“在IDE中开发Flutter应用程序”以获得如何使用这些插件的提示。

或者,您可以在终端中结合使用flutter命令和许多支持编辑Dart的编辑器来完成开发。

环境配置链接:https://flutter.io/get-started/editor/

3、Flutter是附带框架的吗?

是的,Flutter基于最新框架的,灵感来自响应式。Flutter的框架设计采用分层的结构、可定制的(以及可选的)。开发人员可以选择只使用框架的一部分,或者使用不同的框架。

4、Flutter和widgets是一起的吗?

是的,Flutter带有一套 high quality Material Design and Cupertino (iOS-style) widgets。当然,这些widgets只是一个起点,Flutter的设计目的是使创建自己的widgets或自定义现有的widgets变得容易。

Flutter中的所有Widgets:https://flutter.io/widgets/

4、Flutter支持Material Theming吗?

是的,Flutter和Material Theming是紧密关联的,并且全力支持Material Theming的,这方面的一些例子见: MDC-103 Flutter: Material Theming codelab.

官方Material Theming链接:https://codelabs.developers.google.com/codelabs/mdc-103-flutter/#0

5、是否有一个测试框架?

当然,Fltter提供了用于编写单元和集成测试的API。了解更多关于Flutter测试的信息。

我们使用我们自己的测试功能来测试我们的SDK。我们在每次提交时都测量我们的测试覆盖率。

6、Fltter是否附带依赖注入框架或解决方案?

目前还未提供。请分享你的想法致邮箱:[email protected].

构造

1、Flutter是用什么技术构建的?

Flutter是用C、C+、Dart和Skia(一个2D渲染引擎)构建的。请参阅此体系结构图,以更好地了解主要组件。

官方结构图:https://docs.google.com/presentation/d/1cw7A4HbvM_Abv320rVgPVGiUP2msVs7tfGbkgdrTy0I/edit#slide=id.gbb3c3233b_0_162

2、Flutter是如何在Android上运行我的代码的?

C引擎和C+代码是用Android的NDK编译的。DAT代码(SDK和您编写的代码)是提前编译到本机的ARM库中的(AOT)。这个库包含在一个“运行者”Android项目中,整个过程都内置在一个APK中。在启动时,该应用程序加载Flutter库。任何呈现、输入或事件处理等都委托给已编译的Flutter和APP代码。这类似于许多游戏引擎的工作方式。

调试模式构建使用虚拟机(VM)来运行DAT代码(因此出现了“调试”显示信息,提醒我们稍微慢了一点),以便启用有状态的热加载。

3、Flutter是如何在iOS上运行我的代码的?

C引擎和C+代码是用LLVM编译的。DAT代码(SDK和您编写的代码)是提前编译到本机的ARM库中的(AOT)。这个库包含在一个“运行”IOS项目中,整个过程都内置在一个.ipa中。在启动时,该应用程序加载Flutter库。任何呈现、输入或事件处理等都委托给已编译的Flutter和APP代码。这类似于许多游戏引擎的工作方式。

调试模式构建使用虚拟机(VM)来运行DAT代码(因此出现了“调试”显示信息,提醒我们稍微慢了一点),以便启用有状态的热加载。

4、Flutter是否使用我系统的OEM小部件?

不使用,取而代之的是,Flutter提供了一组widgets(包括MaterialDesign和Cupertino(ios样式)小部件),由Flutter的框架和引擎进行管理和呈现。您可以浏览Flutter的小部件目录。

我们希望最终的结果将是更高质量的应用程序。如果我们重用OEM小部件,Fltter应用程序的质量和性能将受到这些小部件质量的限制。

例如,在android中,有一组硬编码的手势和固定的规则来消除它们的歧义。在Fltter中,您可以编写您自己的手势识别器,该识别器是手势系统中的头等参与者。此外,由不同的人编写的两个小部件可以协调来消除手势的歧义。

最新应用程序设计趋势指向设计师和用户想要更多的运动丰富的用户界面和品牌第一的设计。为了实现定制的、漂亮的设计,FILTH被构建成驱动像素,而不是OEM小部件。

通过使用相同的渲染器、框架和一组小部件,我们可以更容易地同时发布iOS和Android,而不必对两个独立的代码库和特性集进行仔细而昂贵的规划。

通过为所有的UI使用一种语言、一个框架和一组库(无论您的UI对于每个移动平台是不同的还是基本一致的),我们的目标还在于帮助降低应用程序的开发和维护成本。

widgets目录链接:https://flutter.io/widgets/

5、当我的移动操作系统更新并引入新的widgets时,会发生什么?

Flutter团队关注iOS和Android对新移动部件的采用和需求,并致力于与社区合作,构建对新部件的支持。这项工作可能以较低级别的框架特性、新的可组合小部件或新的小部件实现的形式出现。

Flutter的分层体系结构旨在支持许多widgets库,我们鼓励并支持社区构建和维护小部件库。

6、当我的移动操作系统更新并引入新的平台功能时会发生什么?

Flutter的互操作和插件系统的设计允许开发人员立即访问新的移动操作系统特性和功能。开发人员不必等待Flutter团队公开新的移动操作系统功能。

7、我可以使用什么操作系统来构建一个Flutter应用程序?

Flutter支持Linux、Mac和Windows上的开发。

8、Flutter是用什么语言编写的?

我们研究了许多语言和Runtimes,最终采用了Dart作为framework和widgets。在C/C+环境下实现了底层图形框架和DART虚拟机。

9、为什么Flutter选择用用Dart作为开发语言?

Flutter使用四个主要维度进行评估,并考虑了framework作者、开发人员和最终用户的需求。我们发现有些语言满足了一些要求,但是DART在我们所有的评价维度上都得到了很高的分数,并且满足了我们所有的要求和标准。

Dart运行时和编译器支持Flutter的两个关键特性的组合:基于JIT的快速开发周期,允许在具有类型的语言中进行形状更改和有状态的热重装,以及一个提前编译器,该编译器为快速启动和产品部署的可预测性能提供高效的ARM代码。

此外,我们亦有机会与Drat社群紧密合作,他们正积极投入资源,以改善Dart在Flutter中的应用。例如,当我们采用Dart时,该语言没有用于生成本地二进制文件的超前的工具链,这有助于实现可预测的高性能,但现在该语言有了,因为Dart团队为Flutter构建了它。类似地,DART VM以前已经针对吞吐量进行了优化,但是团队现在正在针对延迟优化VM,这对于Flutter的工作负载来说更为重要。

DART在以下主要标准上为我们取得了很高的分数:
- 开发人员生产力。Flutter的主要价值主张之一是,它让开发人员使用相同的代码库为iOS和Android开发应用程序,从而节省了工程资源。使用一种高效的语言可以进一步加快开发人员的速度,并使FIRITE更具吸引力。这对我们的框架团队和开发人员都非常重要。大多数Flutter都是用我们提供给用户的相同语言构建的,因此我们需要在100k的代码行上保持高效率,而不牺牲框架和小部件对开发人员的可接近性或可读性。
- 面向对象。对于Flutter,我们需要一种适合Flutter问题域的语言:创建可视化的用户体验。该行业有几十年的经验,在面向对象的语言中构建用户界面框架。虽然我们可以使用一种非面向对象的语言,但这意味着要重新发明轮子来解决几个难题。另外,绝大多数开发人员都有面向对象开发的经验,这使得学习如何使用Flutter进行开发变得更加容易。
- 可预计,高性能。我们希望让开发人员能够创建快速、流畅的用户体验。为了实现这一点,我们需要能够在每个动画帧中运行大量的终端开发人员代码。这意味着我们需要一种既能提供高性能,又能提供可预测性能的语言,而不需要周期性的暂停,这会导致帧丢失。
- 快速分配。Flutter框架使用了一种功能风格的流,它严重依赖于底层的内存分配器,可以有效地处理小的、短期的分配。此样式是在具有此属性的语言中开发的,在缺乏此功能的语言中不能有效地工作。

10、Flutter能运行Drat代码吗?

Flutter应该能够运行大多数不导入(传递的或直接的)DART:镜像或DAT:HTML的DART代码。

11、Flutter的引擎有多大?

2017年6月,我们测量了一个最小的Flutter应用程序的大小(没有Material Components,,只有一个单独的Widgets,构建flutter和apk)。捆绑并压缩为一个版本apk,大约6.7MB。

对于这个简单的应用程序,核心引擎大约是3.3MB(压缩的),框架+应用程序代码大约是1.25MB(压缩的),许可文件(包含在app.flx中)是55k(压缩的),必需的Java代码(classes.dex)是40k(压缩的),并且大约有2.1MB(压缩的)ICU数据。

当然,我们建议您测量您自己的应用程序,通过运行FilltBuildapk并查看app/Output/apk/app-release.apk

性能

1、我能期待什么样的应用程序性能?

你可以期待出色的表现。Flutter的设计目的是帮助开发人员轻松地实现恒定的60 fps。Flutter应用程序是通过本地编译的代码运行的-不涉及解释器。这意味着Flutter应用程序启动得很快。

2、我能期待什么样的开发周期?编辑和刷新之间需要多长时间?

Flutter实现了一个热重载开发周期。在设备或仿真器/模拟器上,您可以预期次秒级的重新加载时间。

Flutter的热重载加载是有状态的,这意味着在重新加载之后,应用程序状态将保持不变。这意味着您可以在应用程序中深度嵌套的屏幕上快速迭代,而不必在每次重新加载后从主屏幕开始。

3、“热重载”和“热重启”有什么不同?

热重载的工作原理是将更新的源代码文件注入到正在运行的Dart VM(虚拟机)中。这不仅包括添加新类,还包括向现有类添加方法和字段,以及更改现有函数。但是,有几种类型的代码更改无法热重载:
- 全局变量初始化器。
- 静态字段初始化器。
- 应用程序的main()方法。

有关更多详细信息,请参见:
https://flutter.io/hot-reload/

4、我可以在哪里部署我的Flutter应用程序?

你可以编译和部署你的Flutter应用到iOS和Android上。

5、Flutter运行在哪些设备和操作系统版本上?

移动操作系统:Android JellyBean、V16、4.1.x或更高版本,以及iOS 8或更高版本。

移动硬件:iOS设备(iPhone4S或更高版本)和ARM Android设备。

注Flutter目前不支持直接构建x86 Android,但是为ARMv 7或ARM 64构建的应用程序运行良好(通过在许多x86 Android设备上进行ARM仿真)。

我们支持使用Android和iOS设备以及Android仿真器和iOS仿真器开发FILTH应用程序。

我们在各种低端到高端手机上进行测试,但是我们还没有正式的设备兼容性保证。

我们不对平板电脑进行测试,因此在平板电脑上使用某些小部件可能会有问题。我们还没有在我们的小部件中实现特定于平板电脑的适应性。

6、Flutter能在网上运行吗?

不能,我们不是在努力提供一个网页版本的Flutter。

7、我可以使用Flutter来构建桌面应用程序吗?

我们专注于移动优先的用例。然而,Flutter是开源的,我们鼓励社区以各种有趣的方式使用Flutter。

8、我可以在我现有的本地应用程序中使用Flutter吗?

是的,您可以在现有的Android或iOS应用程序中嵌入Flutter视图,但是我们的工具目前还没有针对此用例进行完全优化(有关详细信息,请参阅此问题)。

当前的两个演示是Platform_view和fltter_view示例。一些初始文档可以在wiki页面上找到-为现有的应用程序添加FILTH。

在现有的应用添加Flutter以及实例的相关列检:

https://github.com/flutter/flutter/issues/14821
https://github.com/flutter/flutter/tree/master/examples/platform_view
https://github.com/flutter/flutter/tree/master/examples/flutter_view
https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps

9、我可以访问平台服务和API,比如传感器和本地存储吗?

可以,Flutter是使开发人员可以开箱即用地从操作系统中访问某些特定于平台的服务和API。然而,我们希望避免大多数跨平台api的“最小公分母”问题,因此我们不打算为所有本地服务和api构建跨平台api。

许多平台服务和API都在Pub存储库中提供了现成的包。使用现有的包很容易。

Flutter Package: https://pub.dartlang.org/flutter/

use Package: https://flutter.io/using-packages/

最后,我们鼓励开发人员使用Flutter的异步消息传递系统来创建您自己与平台和第三方API的集成。开发人员可以根据需要公开尽可能多或尽可能少的平台API,并构建最适合其项目的抽象层。

10、我可以扩展和自定义绑定的widgets吗?

当然可以,Flutter的Widgets系统被设计成易于定制的。

与其让每个小部件提供大量参数,倒不如让Flutter包含组合。Widgets是由较小的小部件构建的,您可以重用这些小部件,并以新颖的方式组合它们来制作自定义小部件。例如,RaisedButton不对一般按钮小部件进行子类化,而是将材料小部件与GestureDetector小部件组合在一起。材料小部件提供可视化设计,而GestureDetector小部件提供交互设计。

要创建具有自定义视觉设计的按钮,您可以将实现可视化设计的小部件与提供交互设计的GestureDetector结合起来。例如,Cupertino按钮遵循这种方法,并将GestureDetector与实现其可视化设计的其他几个小部件组合在一起。

组合使您可以最大限度地控制小部件的可视化和交互设计,同时还允许大量代码重用。在该框架中,我们将复杂的小部件分解为几个部分,分别实现可视化、交互和运动设计。您可以重新组合这些小部件,但是您喜欢制作自己的具有完整表达范围的自定义小部件。

11、我为什么要在iOS和Android之间共享布局代码呢?

您可以选择为iOS和Android实现不同的应用程序布局。开发人员可以自由地在运行时检查移动操作系统,并呈现不同的布局,尽管我们发现这种做法很少见。

我们越来越多地看到,移动应用程序的布局和设计越来越多地由品牌驱动、跨平台统一化。这意味着在iOS和Android之间共享布局和UI代码的强烈动机。

与严格遵循传统平台美学相比,应用程序审美设计的品牌识别和定制现在变得更加重要。例如,应用程序设计经常需要定制字体,颜色,形状,运动,以及更多,以清楚地传达他们的品牌身份。

我们还看到了在iOS和Android之间部署的常见布局模式。例如,“底部导航栏”模式现在可以很自然地在iOS和Android上找到。在移动平台上,设计理念似乎趋于一致。

12、我可以与我的移动平台的默认编程语言互操作吗?

是的,Flutter支持对平台进行调用,包括在Android上集成Java或Kotlin代码,以及在iOS上集成ObjectC或SWIFT代码。这是通过灵活的消息传递方式实现的,在这种方式下,Flutter应用程序可以使用BasicMessageChannel向移动平台发送和接收消息。

与各平台默认开发语言操作:https://docs.flutter.io/flutter/services/BasicMessageChannel-class.html

了解更多有关访问平台和第三方服务的信息:https://flutter.io/platform-channels/

下面是一个示例项目,展示了如何使用平台通道访问iOS和Android上的电池状态信息:

https://github.com/flutter/flutter/tree/master/examples/platform_channel

13.是否支持反射机制?

不支持

14、如何在Flutter中实现国际化(I18n)、本地化(L10n)和可访问性(A11y)?

在Flutter国际化教程中了解有关i18n和l10n的更多信息:https://flutter.io/tutorials/internationalization/

在可访问性文档中了解更多关于a11y的信息:https://flutter.io/accessibility/

15、我如何编写并行或者和并发应用程序一起使用?

Flutter支持分离物。分离物是Fltter的VM中的独立堆,它们能够并行运行(通常作为单独的线程实现)。隔离通过发送和接收异步消息进行通信。Flutter目前没有共享内存并行解决方案,尽管我们正在为此评估解决方案。

查看使用带Flutter的分离物的示例:https://github.com/flutter/flutter/blob/master/examples/layers/services/isolate.dart

16、我可以在Flutter应用程序的后台运行Dart代码吗?

运行在后台的代码有特定于平台的API,这是因为在每个android和iOS平台上对后台执行的支持存在根本差异。

在Android上,android_alarm_manager插件可以让你在后台运行Dart代码,即使你的Flutter应用程序不在前台。

在IOS上,我们目前不支持此功能。请密切注意Bug6192的更新 :https://github.com/flutter/flutter/issues/6192

17、我可以在Fluttr上使用JSON/XML/protobuffers/etc吗?

当然,org中有用于JSON、XML、Protobufs和许多其他实用工具和格式的库。

org:https://pub.dartlang.org/

有关使用JSON和FILTH的详细说明,请参阅JSON教程:https://flutter.io/json/

18、我可以用FILTH构建3D(OpenGL)应用程序吗?

今天,我们不支持3D通过OpenGL,ES或类似的。我们有一个长期的计划,以公开一个优化的三维API,但现在我们的重点是二维。

19、为什么我的APK或IPA这么大?

通常,资产包括图像、声音文件、字体等,是大部分的APK或IPA。Android和IOS生态系统中的各种工具可以帮助您理解APK或IPA中的内容。

另外,一定要创建一个发布版本的APK或IPA与Flutter工具。发布版本通常比调试版本小得多。

了解更多有关创建Android应用程序的发布版本,以及创建iOS应用程序的发布版本的信息。

Android发布应用:https://flutter.io/android-release/

iOS发布应用:https://flutter.io/ios-release/

20、Flutter应用程序在Chromebook上运行吗?

我们已经看到了一些Chromebook上运行的Flutter应用程序。我们正在跟踪Chromebook上与运行Flutter有关的问题。

猜你喜欢

转载自blog.csdn.net/qq_32228189/article/details/81558071