颤抖:第一次相遇

有关用于开发超快速移动应用程序的新平台的一些详细信息

在访问2016年慕尼黑Dart开发者峰会期间,我为构建本机移动应用程序的新平台感到非常兴奋。

用两个词来说-Flutter是什么? 它是一个平台,可以帮助您使用Dart语言构建极其快速的本机移动应用程序(iOS和Android)。

我将从问题解答开始,以便使那些从未听说过的人更容易理解:

  1. 是否使用Flutter混合构建应用程序? 他们在使用WebView吗?
    没有! 它们是真实的应用程序。 它们与Web没有什么共同之处。 但是Flutter不使用本机窗口小部件-它拥有自己的窗口小部件(稍后再介绍)!
  2. 设备上是否解释了Dart代码? 他们使用JavaScriptCore还是类似的东西?
    没有! Flutter使用Dart代码的AoT(提前)编译功能,将其转换为在设备上运行的本机代码。
  3. 我可以使用平台的本机功能吗?
    是。 如前所述,Flutter应用程序本机应用程序。 通过将消息从Flutter运行时传递到本机主机,您可以调用本机API甚至使用第3方库。
  4. 准备生产了吗?
    没有! 它不是。 Flutter是一个早期的开源项目。 这意味着您应该期待错误,崩溃。 文档不完整。 但是Flutter团队是如此友善,以至于您几乎都能回答所有问题。

关于Flutter的好事

第一印象太棒了! 特别是如果您没有本地移动开发经验(混合应用程序不计入)。 您只需安装SDK,为IDE安装插件(我已经使用过JetBrains IDEA),然后…就可以启动您的应用了!

打电话叫医生!

我真正喜欢Flutter的一件事是,它可以检查您的环境并检测到一切正常,并建议应更改安装或配置的内容。 只需键入flutter doctor

扑热! 随着热装!

现在,几乎所有开发环境都建议“热重载”-您更改代码,然后看到更改。 但是Flutter可以做更多的事情-如果您犯了一些错误并且您的应用程序崩溃了,请修复,保存并恢复您的应用程序,即使您处于原来的状态。

扑快。 真快。

为什么? 由于它的体系结构。 它基于最高级的概念。 什么是最快速流行的Web框架/库? 有角! 🙂但是大多数Web开发人员都会说React。 因为React真的很快。 React的核心原理之一是View对状态做出反应。 每当React重建DOM树时,都会使用“虚拟DOM”在真实DOM中应用更改。 Flutter的操作大致相同-每次状态更改时,它都会重建小部件的整个结构。

注意-不是本机组件,而是Flutter小部件。 因此,引擎可以优化它们的渲染方式(以及是否应该渲染)。 实际上,Flutter通过提供自己的可视化代替了本地可视化。 所有Flutter UI均在单个表面上呈现。 那就真的快了!

Flutter团队的支持

如果您输入Flutter的Gitter,甚至问了非常愚蠢的问题,该问题已经被回答了十次并在官方文档中进行了描述,那么您很快就会得到Flutter团队的某人的回答。 在任何其他项目中都没有找到这种水平的支持。 伊恩·希克森(Ian Hickson),埃里克·塞德尔(Eric Seidel)(@eseidelGoogle)和亚当·巴特(Adam Barth)确实对解释Flutter甚至是Dart的基本概念很有帮助。

我的尝试

小免责声明:我不是本地移动开发人员。 我对Ionic 2和NativeScript有所了解,但即使是最后一篇,也没有让我有真正的Native应用程序开发过程的感觉。

因此,我决定尝试自己编写一个小型应用,该应用只是向http服务发出请求并显示为一组卡片。 该应用程序不是最终产品,并且尚未量产,但是您可以检查-它可以在Android的Play Market上找到。

对我来说非常重要的是要理解:

  1. 窗口小部件的生命周期 :什么是有状态窗口小部件和什么是无状态窗口小部件。 他们中的哪个人何时使用。 这是一个对我有很大帮助的链接:https://flutter.io/widgets-intro/
  2. 如何使用不同的布局 。 填充物。 检查https://flutter.io/widgets/#layout-models
  3. 如何在小部件之间传递数据/事件 。 对我来说最有价值的是检查Checkbox小部件的来源:https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/material/checkbox.dart
  4. 这是飞镖。 您需要知道如何编写有效的Dart:装饰器,lambda,流等。这真的很酷!

尚无代码:仅印象

尽管我的“项目”(实际上是实验)在GitHub上可用,但我不确定值得作为示例参考。 而且我已经决定将这篇文章保持在入门级别,因此没有提供任何代码示例。 我打算分享一些有趣的代码解决方案(例如下一篇文章中如何在Flutter中呈现HTML类型)。

总的来说,我可以说我在Flutter的经历非常棒。 即使是我发现了一个崩溃错误,也很难找到文档,但是仍然得到的应用程序使我完全满意-它非常快,很小,并且很高兴编写代码。 即使您没有像我这样的移动开发经验,我也建议尝试创建一个。