使用 Flutter 编写 macOS 应用

介绍

自 2018 年推出第一个稳定版本以来,Flutter 已经发展了很多,包括支持多种平台,例如 Web、Windows、LinuxmacOS(甚至还支持 Risk V Architectures!)

使用 Flutter 时,您将主要使用 Dart 语言编写代码。这意味着你不能访问原生平台的功能(除非您使用的是 ffigen[1]jnigen[2])。尽管在 pub.dev 上有很多库,涵盖了访问原生平台功能(Android 存储、连接状态等)方面的大部分需求,但你可能需要一些时间来编写你的特定平台处理一些任务的代码。幸运的是,Flutter 提供了一个 API 来做到这一点。这些称为平台渠道[3]

要了解有关平台渠道的更多信息,我建议阅读 Invertase 开源工程师 Mais Alheraki 的这篇文章[4]

我最近需要为一个宠物项目编写代码,我发现文档中没有关于如何在 macOS 上执行此操作的资源。因此,在本文中,我们将学习如何为 macOS 应用程序编写特定于平台的代码。

对于本教程,我们将编写一个简单的 macOS 应用程序。该应用程序将显示有关设备电池的信息,例如剩余时间、当前容量以及是否正在充电。

使用 Flutter 编写 macOS 应用

设置

所以首先,我们将创建一个新的 Flutter 应用程序。由于我们仅针对 macOS,因此我们将取消选中其他平台

使用 Flutter 编写 macOS 应用

Flutter部分

我们的项目现已创建。接下来,我们将编写代码的 Dart 部分。我们将创建一个 DeviceBatteryChannel 来处理我们对本机 API 的调用:

使用 Flutter 编写 macOS 应用

完整文件:device_battery_channel.dart[5]

这里发生了什么事

我们创建了一个类来处理对本机 API 的调用。在这个类中,我们定义了一个名为 com.stevenosse.battery/device_battery 的 Method Channel。这个类定义了三个方法来有效地处理我们的调用。让我们深入了解我们的第一个方法,getBatteryLevel:

使用 Flutter 编写 macOS 应用

在此方法中,我们从方法通道调用 getBatteryLevel 方法,不带任何参数。

原生部分

我们的原生代码将用 Swift 编写。

我们完成任务所需的代码是从 StackOverflow 上的这个答案[6]复制和粘贴的。

我们现在将设置我们的方法调用处理程序。为此,我们将重写 AppDelegate 中的 applicationDidFinishLaunching 方法

使用 Flutter 编写 macOS 应用

所以在这里我们实现了我们的方法并启动了我们的方法通道。我们需要实现一个方法调用处理程序(它将处理来自 Dart 代码的调用)。这是我们的 getBatteryLevel 方法的样子:

使用 Flutter 编写 macOS 应用

当收到对 getBatteryLevel 的调用时,我们使用我们的 InternalFinder 类。我们会先检查设备是否有内置电池,然后获取电池的当前电量并返回结果。

此应用程序的完整源代码可在此处获得:https://github.com/stevenosse/battery

总结

我想让本文中的事情变得最简单,以便于理解。然而,我们可以通过使用 Pigeon[7] 来做的更好。 Pigeon 是一个生成器工具,可以使 Flutter 和主机平台之间的通信类型安全、更简单、更快速,它由 Flutter 团队开发。

引用链接

[1] ffigen: https://pub.dev/packages/ffigen
[2] jnigen:
https://pub.dev/packages/jnigen
[3] 平台渠道:
https://docs.flutter.dev/development/platform-integration/platform-channels
[4] 这篇文章:
https://invertase.io/blog/flutter-native-apis-pt1
[5] device_battery_channel.dart:
https://github.com/stevenosse/battery/blob/main/lib/src/services/device_battery_channel.dart
[6] 这个答案:
https://stackoverflow.com/a/57145146/9934529
[7] Pigeon:
https://pub.dev/packages/pigeon

.preview-wrapper pre::before { position: absolute; top: 0; right: 0; color: #ccc; text-align: center; font-size: 0.8em; padding: 5px 10px 0; line-height: 15px; height: 15px; font-weight: 600; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年4月3日 上午11:26
下一篇 2023年4月3日 上午11:36

相关推荐

  • 浙江省建设厅科研项目计划浙江省建设厅科研项目计划

    浙江省建设厅科研项目计划 浙江省建设厅一直致力于推动建筑行业的进步和发展,因此推出了一系列科研项目计划,旨在促进技术创新和行业进步。本文将介绍浙江省建设厅科研项目计划的具体情况。 …

    科研百科 2024年6月12日
    104
  • 企微SCRM系统中的客户SOP:标准化操作指南赋能企业客户关系管理(企微scrm源码)

    企微SCRM系统中的客户SOP:标准化操作指南赋能企业客户关系管理(企微scrm源码)   在数字化浪潮的推动下,企业微信(企微)SCRM系统逐渐成为企业客户关系管理的新宠。而在这…

    科研百科 2024年3月22日
    186
  • 科研项目的组织措施

    科研项目的组织措施 科研项目是科学技术发展的重要基础,如何有效地组织科研项目是项目管理中至关重要的一环。以下是一些科研项目组织措施的建议: 1. 确定项目目标和任务 在开始组织科研…

    科研百科 2024年11月19日
    1
  • 最新项目管理软件

    最新项目管理软件 随着数字化时代的到来,项目管理已经成为了一个越来越重要的话题。现在,有很多最新的项目管理软件可供选择,这些软件能够帮助项目经理更好地管理项目,提高生产力,缩短项目…

    科研百科 2024年8月14日
    33
  • bug 项目管理系统

    Bug 项目管理系统 随着软件开发的不断进步,软件开发团队越来越需要一种高效的工具来管理和维护代码库。其中, bug 项目管理系统是一个非常有用的工具,它可以帮助软件开发团队更好地…

    科研百科 2024年12月12日
    0
  • 2021系统集成项目管理答案

    2021系统集成项目管理答案 系统集成项目管理是指一项复杂的项目,包括多个软件和硬件系统,需要协调多个团队,并在整个项目生命周期中保持高度透明度和协作性。以下是一些有关2021系统…

    科研百科 2024年5月23日
    75
  • 主要完成人对本科研项目的贡献

    主要完成人对本科研项目的贡献 本科研项目的主要完成人为X教授,他是本校的知名专家,在多个领域都有着丰富的经验和深厚的造诣。在本项目的过程中,X教授充分发挥了他的专业优势,以及敏锐的…

    科研百科 2024年10月28日
    0
  • 「平云智慧党建」浙江温岭市 网格智治激活基层治理“微单元”

    近年来,浙江省温岭市从优化网格设置、数字赋能、制度设计等方面入手,构建党建统领网格智治体系,助力提升乡村治理精细化水平,加强基层党组织建设,夯实基层治理基础,破解村社事务与人员力量…

    科研百科 2022年12月30日
    173
  • 蔬菜所揭示番茄紫色果实形成的分子机理

      近日,中国农业科学院蔬菜花卉研究所与华南农业大学开展合作研究,揭示了番茄紫色果实形成的分子遗传基础以及果实表皮中花青素生物合成的分子调控网络,为番茄高品质分子设计育种奠定了基础…

    科研百科 2022年5月14日
    412
  • 退休党员管理不到位整改措施

    尊敬的各位领导、各位同志: 随着人口老龄化趋势的加剧,退休党员的管理问题也日益突出。针对这一问题,我们采取了一系列的整改措施,旨在提高退休党员的管理水平和服务质量,促进退休党员的全…

    科研百科 2024年10月3日
    42