Flutter 您需要知道的知识点 | FAQ・第五期
Flutter 是一套高效的跨平台免费开源 SDK,可以帮助开发者用一套代码同时在 Android 和 iOS 上构建媲美原生体验的精良应用,近期更是升级到了 1.7 版本,带来诸多全新的特性与改进。我们也一直从社区中搜集到不少开发者关注的问题,我们会用连载的形式由浅到深地为开发者们进行解答。如果您对 Flutter 已经有一定的了解,不妨在看到问题的时候先试着回答,然后和我们给出的答案进行比较,从而进一步加深理解。
下面开始 Flutter FAQ 第五期: 功能篇 (下)
问题 1:
我为什么要在 iOS 和 Android 应用间共享布局代码?
点击下方空白区域查看答案
▼
您可以选择为 iOS 和 Android 应用实现不同的布局。开发者可以在运行时检查移动操作系统,并根据操作系统呈现不同的布局,但我们发现这种做法比较少见。
我们发现移动应用布局和设计正在不断发展,更基于品牌设计的诉求,而且跨平台之间的呈现逐渐趋同。这意味着不少开发者会有很强的动力在 iOS 和 Android 上共享布局和 UI 代码。
如今,应用美学设计的品牌表达和定制比严格遵循平台自己的美学更为重要。例如,应用设计通常需要自定义字体、颜色、形状、动效等,以便清楚地传达出其品牌独有的美学。
我们还发现,很多应用都在 iOS 和 Android 上采用了通用的布局模式。例如,您现在可以在 iOS 和 Android 上很方便地找到 “底部导航” 设计模式。移动平台上的设计理念似乎正在趋于一致。
问题 2:
我能与移动平台上的默认编程语言进行互操作吗?
点击下方空白区域查看答案
▼
可以,Flutter 支持调用 (包括集成) Android 上的 Java 或者 Kotlin 代码,或者 iOS 上的 ObjectiveC 或 Swift 代码。这是通过灵活的信息传递方式实现的,Flutter 应用可以使用 BasicMessageChannel 向移动平台收发消息。
了解 BasicMessageChannel
https://api.flutter.dev/flutter/services/BasicMessageChannel-class.html
通过平台通道访问平台与第三方服务
https://flutter.dev/docs/development/platform-integration/platform-channels
我们还为大家准备了一个示例项目,演示如何使用平台通道访问 iOS 和 Android 上的电池状态信息。
获取平台通道示例项目
https://github.com/flutter/flutter/tree/master/examples/platform_channel
问题 3:
Flutter 包含反射/镜像系统吗?
点击下方空白区域查看答案
▼
现在暂时还不行。由于 Flutter 应用已经针对最终产物进行了预编译,并且控制二进制内容体积始终是现代移动应用需要面对的一个问题,所以我们禁用了 dart:mirrors。我们很想知道您需要反射/镜像系统的目的,请通过如下地址反馈给我们您的想法。
反馈关于反射/镜像的使用需求
flutter-dev@googlegroups.com
问题 4:
我应该如何在 Flutter 中实现国际化 (internationalization, i18n)、本地化 (localization, l10n) 和可访问性 (accessibility, a11y)?
点击下方空白区域查看答案
▼
关于国际化和本地化,请查看教程
https://flutter.dev/docs/development/accessibility-and-localization/internationalization
关于可访问性/无障碍使用,请查看文档
https://flutter.dev/docs/development/accessibility-and-localization/accessibility
问题 5:
我如何为 Flutter 开发并行 (parallel) 和/或并发 (concurrent) 应用?
点击下方空白区域查看答案
▼
Flutter 支持 isolate。一个个的 isolate 是 Flutter VM 里彼此独立的堆 (heap),可以并行运行 (通常以独立线程的形式实现)。Isolate 之间通过异步收发消息来进行通信。Flutter 目前还没有共享内存的并行机制,不过我们正在评估对应的解决方案。
在 Flutter 使用 isolate 的示例
https://github.com/flutter/flutter/blob/master/examples/layers/services/isolate.dart
问题 6:
我能在 Flutter 应用后台运行 Dart 代码吗?
点击下方空白区域查看答案
▼
可以,您可以在 iOS 和 Android 后台进程中运行 Dart 代码。
使用 Flutter 插件和 Geofencing 在后台运行 Dart 代码
https://medium.com/flutter/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124
问题 7:
我在 Flutter 里能使用 JSON/XML/protobuffers 等内容吗?
点击下方空白区域查看答案
▼
当然可以。Pub 站点提供了很多这样的代码库,包括 JSON, XML, protobufs 以及很多其他内容格式。
Pub 站点
https://pub.dev/
使用 JSON 的教程
https://flutter.dev/docs/development/data-and-backend/json
问题 8:
我能用 Flutter 构建 3D (OpenGL) 应用吗?
点击下方空白区域查看答案
▼
我们暂不支持通过 OpenGL ES 或类似的机制实现 3D。针对 3D API 我们有一个长期的计划,但目前我们专注于呈现 2D。
问题 9:
我的 APK 或 IPA 为什么这么大?
点击下方空白区域查看答案
▼
通常,图像、声音文件、字体等资源在 APK 或 IPA 里占据了相当的比重。Android 和 iOS 生态系统中有很多工具可以帮助您了解 APK 或 IPA 中的各种内容的比重情况。
此外,请务必使用 Flutter 工具创建 APK 或 IPA 的发布版本。发布版本的体积通常远小于调试版本。
创建 Android 应用的发布版本
https://flutter.dev/docs/deployment/android
创建 iOS 应用的发布版本
https://flutter.dev/docs/deployment/ios
问题 10:
Flutter 应用能在 Chromebook 上运行吗?
点击下方空白区域查看答案
▼
我们已经看到有 Flutter 应用运行在某些 Chromebook 上了。针对在 Chromebook 上运行 Flutter 的情况,我们有进行持续的跟踪。
了解在 Chromebook 上运行 Flutter 的情况
https://github.com/flutter/flutter/labels/platform-arc
如果您在使用 Flutter 构建应用的时候有什么想法或疑问,欢迎在评论区给我们留言。我们期待着看到您为不同平台的用户们打造出同样精美、高效的体验!
想了解更多 Flutter 内容?
在公众号首页发送关键词 “Flutter” ,获取 Flutter 相关历史技术文章;
还有更多疑惑?欢迎点击菜单 “联系我们” 反馈您在开发过程中遇到的问题。
推荐阅读