Flutter 您需要知道的知识点 | FAQ・第四期

谷歌开发者 2019-06-17 09:30

Flutter 是一套高效的跨平台免费开源 SDK,可以帮助开发者用一套代码同时在 Android 和 iOS 上构建媲美原生体验的精良应用。今年的 I/O 开发者大会上我们将 Flutter 进一步升级到了 1.5 版本,我们从社区中也搜集到了不少开发者关注的问题,我们会用连载的形式由浅到深地为开发者们进行解答。如果您对 Flutter 已经有一定的了解,不妨在看到问题的时候先试着回答,然后和我们给出的答案进行比较,从而进一步加深理解。


下面开始 Flutter FAQ 第四期: 功能篇 (上)


问题 1:

Flutter 应用会拥有怎样的性能表现?

点击下方空白区域查看答案 

Flutter 应用会有很出色的性能。Flutter 设计的目标就是帮助开发者轻松实现 60 fps 的稳定帧率。Flutter 应用通过本地编译的代码运行,不涉及解释过程。这也意味着 Flutter 应用启动会非常快捷。


问题 2:

开发 Flutter 时的操作周期有多长?修改代码和看到界面内容更新之间会隔多久?

点击下方空白区域查看答案 

Flutter 使用的是热重载式的开发操作周期。您在实机或者模拟器上都能实现亚秒级的修改-更新速度。


另外,Flutter 的热重载是有状态的 (stateful),这意味着重新加载后 app 的状态会被保留。这样即使您修改的界面在应用很深的位置,重载后您也能直接看到修改后的该界面,而无需从应用首页开始重新操作。


问题 3:

热重载 (hot reload) 相比较热重启 (hot restart) 的区别在哪里?

点击下方空白区域查看答案 

热重载是通过将更改过的源代码文件注入到正在运行的 Dart VM 中来实现的。这不仅包括添加新的类,还包括在既存的类里添加方法和字段,以及修改既有的方法。不过有少数代码修改是无法被热重载的:


  • 全局变量的初始化程序

  • 静态字段的初始化程序

  • 应用的 main() 方法


  • 更多关于热重载的详细信息,请查看

    https://flutter.dev/docs/development/tools/hot-reload



问题 4:

我能把 Flutter 应用部署到哪里?

点击下方空白区域查看答案 

您可以将 Flutter 应用编译并部署到 iOS 和 Android 平台上。

问题 5:

Flutter 可以运行在哪些设备,哪些操作系统版本上?

点击下方空白区域查看答案 

移动操作系统: Android Jelly Bean, v16, 4.1.x 或更新版本,以及 iOS 8 或更高版本。


移动硬件: iOS 设备 (iPhone 4S 或更新版本) 和 ARM Android 设备。


请注意,Flutter 目前不支持直接为 x86 Android 进行构建 (参考问题 #9253),但是针对 ARMv7 或 ARM64 构建的应用都在很多 x86 Android 设备上表现良好 (通过模拟 ARM 来实现)。


我们支持使用 Android 和 iOS 设备以及这两种 OS 的模拟器来开发 Flutter 应用。


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


我们认为,Flutter 会在平板电脑上运行良好。我们目前没有覆盖到全部的 Material Design 平板电脑适配规则,但我们正计划在这个领域进一步加大投入。


  • 参考问题 #9253

    https://github.com/flutter/flutter/issues/9253




问题 6:

Flutter 能在 Web 上运行吗?

点击下方空白区域查看答案 

Flutter web 目前处于技术预览状态。我们将它做为 Flutter 项目的一个分支进行开发,这种做法有利于在确保高速迭代的同时保持 Flutter 核心项目的稳定。您可以将现有的 Flutter 代码打包放在 web 预览版里使用,但由于我们还处于预览状态所以会有一些警告。


  • Flutter web 技术预览版

    https://flutter.dev/web

  • 使用 Flutter web 的操作说明

    https://github.com/flutter/flutter-web



问题 7:

我能使用 Flutter 构建桌面应用吗?

点击下方空白区域查看答案 

可以,但目前支持得并不完美。我们正在致力于为桌面应用打造最佳体验。这方面的进展在我们的 wiki 上可以了解到。


  • Flutter wiki - 桌面应用

    https://github.com/flutter/flutter/wiki/Desktop-shells


问题 8:

我能在我现有的原生应用里使用 Flutter 吗?

点击下方空白区域查看答案 

可以,您可以在现有的 Android 或 iOS 应用中嵌入 Flutter 视图,但是我们的工具目前尚未针对这场景进行全面优化 (相关详情请参考问题 #14821)。


目前的两个演示是 platform_viewflutter_view。我们的 wiki 页面中也提供了一些初始文档。


  • 参考问题 #14821

    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

  • Flutter wiki - 将 Flutter 添加至现有应用

    https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps



问题 9:

我能访问传感器、本地存储之类的平台服务和 API 吗?

点击下方空白区域查看答案 

可以。Flutter 默认即为开发者提供了操作系统中某些平台专属服务和 API 的操作入口。但是,我们希望避免大多数跨平台 API 的 “最小公约数” 问题,因此我们不打算为所有本地服务和 API 构建跨平台的操作 API。


很多平台服务和 API 都在 Pub 站点中提供了现成的代码包,使用起来非常方便。


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


  • Pub 站点中有大量现成的 Package

    https://pub.dev/flutter/

  • 使用 Package 的说明

    https://flutter.dev/docs/development/packages-and-plugins/using-packages

  • Flutter 平台通道

    https://flutter.dev/docs/development/platform-integration/platform-channels


问题 10:

我能对自带的 widget 进行扩展和定制吗?

点击下方空白区域查看答案 

当然可以。Flutter widget 系统的设计思路就是让开发者可以轻松定制。


Flutter 没有让每个 widget 都提供大量参数,而是采用了组合的方式。较大的 widget 是用较小的 widget 组合构建出来的,您可以重复使用它们,并以新颖的方式对其加以组合,从而生成自定义的 widget。例如,RaisedButton 没有继承自一个通用按钮 widget,而是将 Material widget 与 GestureDetector widget 组合在一起。Material widget 负责视觉呈现,GestureDetector widget 则实现其交互。


如果您想要创建自定义设计的按钮,可以将负责视觉呈现的 widget 与提供交互的 GestureDetector 组合起来使用。例如,CupertinoButton 就采用了这种方法,将 GestureDetector 与其他几个负责表现视觉的 widget 进行组合。


这种组合策略使您可以最大限度地控制 widget 的可视化和交互逻辑,同时重复利用大量代码。在框架中,我们将复杂的 widget 分解为实现视觉、交互和动效的各部分。您可以按照自己喜欢的方式重新组合这些 widget,从而制作出自定义 widget 来完整传达出您的设计意图。


如果您在使用 Flutter 构建应用的时候有什么想法或疑问,欢迎在评论区给我们留言。我们期待着看到您为不同平台的用户们打造出同样精美、高效的体验!


 点击屏末 | 文 | 了解 Flutter 更多详细信息



推荐阅读




谷歌开发者 Google 中国官方账号。汇集 Android, Flutter, Chrome OS, AI 等开发技术,以及 Google Play 平台出海相关信息。
评论
热门推荐
相关推荐
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦