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

相关推荐

  • 煤矿井下常见的运输事故及预防措施(煤矿运输事故防范措施)

    今年,山西连续发生两起煤矿井下运输事故。 2月16日,中煤平朔井工一矿1名电工在19112工作面辅运巷300米处做完电气绝缘后,从2号移变与无轨胶轮车辆之间取摇表时,胶轮车突然发生…

    科研百科 2022年7月21日
    603
  • 电子合同归档流程详解(电子合同归档流程详解图)

    随着科技的发展,电子合同已经成为了我们日常生活和工作中不可或缺的一部分。电子合同的管理和归档十分重要,本文将详细介绍电子合同的归档流程,帮助您更好地管理电子合同。 一、电子合同的定…

    科研百科 2024年1月2日
    109
  • 项目组织实施与管理措施怎么写

    项目组织实施与管理措施怎么写 项目组织实施与管理措施是项目管理的核心内容。项目组织实施是指将项目计划转化为现实,包括制定项目计划、组织资源、分配任务、控制进度和成本等。项目管理措施…

    科研百科 2024年10月26日
    94
  • 有诚信的项目管理系统

    有诚信的项目管理系统 在当今的商业环境中,诚信是一个企业成功的关键。一个有诚信的项目管理系统可以帮助企业更好地实现这个目标。 一个有效的项目管理系统可以提高企业的透明度和可信度。它…

    科研百科 2024年12月31日
    0
  • 工程管理硕士软件

    工程管理硕士软件 随着现代科技的不断发展,工程管理硕士(MEM)软件已经成为了一个非常流行的东西。MEM软件是一种用于工程管理的工具,它可以帮助工程管理人员更好地规划和组织他们的工…

    科研百科 2025年1月4日
    0
  • 电子合同存证系统怎么选,价格是多少?(电子合同存储)

    电子合同系统变得越来越重要,随着数字化时代的发展,越来越多的企业意识到了电子合同的方便和效率。在过去,传统的纸质合同往往需要耗费大量的时间和资源,而且易于被篡改或丢失。而电子合同则…

    科研百科 2024年3月19日
    92
  • 福州这几个单位招聘啦,想找工作的小伙伴快来(福州的工作招聘信息)

    求职的小伙伴速看!福州这几个单位正在招聘! 鼓楼 鼓楼区老年学校协会招聘1名劳务派遣工作人员 福州市鼓楼区老年学校协会主要开展与老年教育相关的工作,地点位于福州市鼓楼区津泰路160…

    科研百科 2023年11月9日
    115
  • 成果鉴定唯一性承诺函

    成果鉴定唯一性承诺函 尊敬的评审专家: 本人在此郑重承诺,所提交的成果鉴定材料是唯一的,不存在任何抄袭、剽窃、篡改等问题。同时,保证所提交的成果鉴定材料符合相关鉴定标准和规范,具有…

    科研百科 2024年11月17日
    5
  • 广西自治区社会工作部内设机构

    广西自治区社会工作部内设机构 广西自治区社会工作部是广西自治区政府主管社会工作的部门,其内设机构包括: 1. 办公室 负责组织协调部门工作,制定部门工作计划和制度,协调各科室之间的…

    科研百科 2024年11月16日
    55
  • vue内容管理系统项目

    Vue内容管理系统项目概述 随着现代网站和内容管理系统的不断发展,越来越多的网站和内容管理系统开始使用Vue框架来构建他们的应用程序。Vue是一个非常流行的JavaScript框架…

    科研百科 2025年1月14日
    1