使用 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

相关推荐

  • 农作物基因资源与基因改良国家重大科学工程第一届学术委员会暨理事会会议在京举行

      2005年4月28日,农作物基因资源与基因改良国家重大科学工程第一届学术委员会暨理事会会议在京举行。国家重大科学工程学术委员会委员和理事会理事出席了会议。国家重大科学工程管理委…

    科研百科 2022年5月20日
    284
  • 项目成本信息管理系统

    项目成本信息管理系统 随着项目管理的深入发展,项目成本信息管理系统已经成为了项目管理中不可或缺的一部分。项目成本信息管理系统可以帮助项目经理和成本分析师更好地管理项目成本,提高项目…

    科研百科 2025年1月9日
    0
  • 常州项目管理系统选型

    常州项目管理系统选型 随着现代项目管理的日益复杂,选择一款适合自己的项目管理系统变得非常重要。在常州,许多企业正在寻找一款高效、可靠的项目管理系统,以便更好地管理项目进度、预算和质…

    科研百科 2025年1月7日
    0
  • 微视频 – 河北廊坊广阳:智慧党建平台 助力解民生实事

    2021年以来,结合党史学习教育,河北省廊坊市广阳区进一步创新党建引领形式,不断加强基层党组织建设,聚焦强化社会治理、解决民生问题,研发了“党建引领社区治理”信息系统,建设了集指挥…

    科研百科 2023年1月26日
    385
  • 关于科研项目的宣传报道

    科研项目的宣传报道 近年来,随着科技的不断发展,科研项目已经成为人类探索未知世界的重要工具。在这个时代,科研项目不仅是科学家们努力追求的目标,也是社会各界关注和支持的重要领域。 今…

    科研百科 2025年4月22日
    0
  • 青岛合同管理

    青岛合同管理 青岛是中国东部的一个沿海城市,拥有丰富的自然资源和独特的地理位置。然而,随着城市的快速发展,合同管理成为了一个重要的问题。青岛合同管理是指在青岛进行的各种类型的合同,…

    科研百科 2024年5月31日
    55
  • 南京中医药大学副校长孙秀兰简历

    孙秀兰,女,汉族,1968年12月生,江苏南京人,博士,教授,1990年7月毕业于南京中医药大学中医学专业,获得学士学位。2004年7月获得中医学博士学位,2004年7月至2007…

    科研百科 2024年10月13日
    65
  • 软考高项-第九章 项目范围管理考点集锦(软考项目管理高级大纲)

    项目范围管理包括确保项目做且只做所需的全部工作,以成功完成项目。项目范围管理主要在于定义和控制哪些工作应该包括在项目内,哪些不应该包含在项目内。 9.1管理基础 9.1.1产品范围…

    科研百科 2024年4月25日
    95
  • 中国科协创新战略研究院科研项目

    中国科协创新战略研究院科研项目: 探索人工智能在农业领域的应用 近年来,人工智能技术在各个领域得到了广泛的应用,其中农业领域也受到了越来越多的关注。中国科协创新战略研究院的一项科研…

    科研百科 2024年4月8日
    80
  • 第71集团军某旅搭建“智慧党建平台”提升党组织建设水平

    随着军营网络快速发展,上联军委机关、下通基层班排的强军网,逐渐成为官兵工作、学习、娱乐的重要平台。借助军营网络,将新技术与日常管理、训练等融合创新,能带来“1 1>2”的可喜…

    科研百科 2024年2月11日
    163