Flet iOS 设备信息 API 指南:IosDeviceInfo 类型字段详解与实战用法
前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载Flet 提供了一套跨平台的设备信息查询 API其中IosDeviceInfo是面向 iOS/iPadOS 运行时的设备信息快照类型封装了型号、系统版本、内存、磁盘、内核信息等十余项字段。本文基于 Flet 开源仓库中的类型定义与源码实现系统讲解IosDeviceInfo含嵌套类型IosUtsname的完整字段语义、获取方式Page.get_device_info()以及底层从 Python 到 Flutter 再到原生系统的调用链帮助你基于该 API 实现设备能力检测、模拟器判断、系统版本适配等移动端实战需求。IosDeviceInfo 是什么IosDeviceInfo是 Flet 在 iOS/iPadOS 运行时返回给 Python 侧的设备信息数据类定义于 device_info.py。它在 Flet 的设备信息类型体系中扮演iOS 专属快照的角色同一体系还包括AndroidDeviceInfo/AndroidBuildVersionAndroidMacOsDeviceInfomacOSLinuxDeviceInfoLinuxWindowsDeviceInfoWindowsWebDeviceInfo/WebBrowserNameWeb以及所有平台共有的基类DeviceInfo提供locales字段IosDeviceInfo使用value(kw_onlyTrue)装饰器标记为 dataclass所有字段均为关键字参数字段来源是 Flutter 社区插件device_info_plus的IosDeviceInfo经过 Dart 侧序列化为 Map 后再通过 Flet 协议传输并在 Python 侧反序列化为本类型。完整字段详解以下字段全部继承自 device_info.py 中IosDeviceInfo的定义并附上字段类型、含义与典型取值。基础标识与系统信息字段类型说明modelstr系统报告的设备型号来自UIDevice.model如iPhone、iPadmodel_namestr商用/用户熟知的型号名称如iPhone 16 Pro、iPad Pro 11-Inch 3localized_modelstr本地化后的设备型号名称来自UIDevice.localizedModelnamestr设备名称。注意 iOS 版本差异iOS 16 返回用户自定义的设备名iOS 16 时若工程没有相应 entitlement则只返回通用设备名system_namestr当前操作系统名称来自UIDevice.systemName通常为iOS或iPadOSsystem_versionstr当前操作系统版本字符串来自UIDevice.systemVersion如18.0is_physical_devicebool是否物理真机。在模拟器Simulator中运行时为False真机为Trueis_ios_app_on_macbool当前进程是否是运行在 Mac 上的 iPhone/iPad 应用Apple Silicon Mac 上的 iOS app来自NSProcessInfo.isiOSAppOnMacidentifier_for_vendorOptional[str]标识当前设备的 UUID来自UIDevice.identifierForVendor可能为None例如应用没有相应的访问条件时内存与存储字段类型说明physical_ram_sizeint设备物理 RAM 总量单位是兆字节MBavailable_ram_sizeint当前未分配的可用 RAM 大小单位也是 MBtotal_disk_sizeint磁盘总容量单位是字节bytesfree_disk_sizeint空闲磁盘容量单位是字节bytes注意内存与磁盘字段的单位并不一致RAM 相关字段以 MB 计磁盘相关字段以字节计换算时需分别按 1024² 和 1 处理。嵌套类型 IosUtsnameutsname字段的类型是IosUtsname定义于同一文件的 第 775-797 行其信息来源于 POSIX 标准库sys/utsname.h用于描述底层内核信息字段类型说明machinestr硬件类型标识如iPhone7,1对应 iPhone 6 Plus这类机型标识符node_namestr网络节点名hostnamereleasestr内核发布级别release levelsys_namestr操作系统名称如Darwinversionstr内核版本级别version levelutsname.machine是与硬件架构最直接相关的字段可用于在真机上区分具体机型标识例如iPhone15,2、iPad13,1等。基类字段 localesIosDeviceInfo继承自DeviceInfo基类第 23-49 行因此还包含字段类型说明localeslist[Locale]系统报告的全部受支持区域设置locale列表按优先级排序索引越小越优先第一个元素即主 locale。该值变化时会触发Page.on_locale_change事件locales用于指导应用界面应该采用的语言与格式化约定是国际化i18n功能的关键输入。如何获取 IosDeviceInfo通过 Page.get_device_info()在 iOS 平台上调用Page.get_device_info()即可获得IosDeviceInfo实例。该方法的定义位于 page.py 第 1361-1384 行async def get_device_info(self) - Optional[DeviceInfo]: info await self._invoke_method(get_device_info) if self.web: return from_dict(WebDeviceInfo, info) elif self.platform in [PagePlatform.ANDROID, PagePlatform.ANDROID_TV]: return from_dict(AndroidDeviceInfo, info) elif self.platform PagePlatform.IOS: return from_dict(IosDeviceInfo, info) elif self.platform PagePlatform.MACOS: return from_dict(MacOsDeviceInfo, info) # ... 其他平台从源码可以看到方法是一个async方法内部通过_invoke_method(get_device_info)向 Flutter 前端发起请求前端返回 JSON Map 后Python 侧根据page.platform判定平台在 iOS 时通过from_dict(IosDeviceInfo, info)反序列化为IosDeviceInfo对象from_dict.py 中的from_dict支持 dataclass、嵌套 dataclass、枚举、列表、Optional 等结构的递归转换。若平台无法识别则返回None。完整的实战示例由于get_device_info()是异步方法示例程序需要以 async 方式运行使用ft.run(main)。以下是一个展示 iOS 设备核心信息的完整示例import flet as ft async def main(page: ft.Page): page.scroll ft.ScrollMode.AUTO info await page.get_device_info() if info is None: page.add(ft.Text(无法获取设备信息当前平台不支持)) return # 在 iOS 真机/模拟器上info 是 flet.IosDeviceInfo if hasattr(info, model_name): rows [ ft.ListTile(titleft.Text(型号名称), subtitleft.Text(info.model_name)), ft.ListTile(titleft.Text(系统版本), subtitleft.Text(f{info.system_name} {info.system_version})), ft.ListTile(titleft.Text(物理内存 (MB)), subtitleft.Text(str(info.physical_ram_size))), ft.ListTile(titleft.Text(可用内存 (MB)), subtitleft.Text(str(info.available_ram_size))), ft.ListTile(titleft.Text(总磁盘 (bytes)), subtitleft.Text(str(info.total_disk_size))), ft.ListTile(titleft.Text(空闲磁盘 (bytes)), subtitleft.Text(str(info.free_disk_size))), ft.ListTile(titleft.Text(真机), subtitleft.Text(str(info.is_physical_device))), ft.ListTile(titleft.Text(硬件标识 (utsname.machine)), subtitleft.Text(info.utsname.machine)), ft.ListTile(titleft.Text(内核 (utsname.sys_name)), subtitleft.Text(info.utsname.sys_name)), ] page.add(*rows) else: page.add(ft.Text(f设备信息: {info})) if __name__ __main__: ft.run(main)说明hasattr(info, model_name)是一种简单但不够严谨的平台判别方式更规范的做法是直接检查page.platform如page.platform ft.PagePlatform.IOS或直接使用类型标注isinstance(info, ft.IosDeviceInfo)。info.utsname是IosUtsname对象可继续访问其machine、node_name、release、sys_name、version五个属性。由于get_device_info()返回类型在静态上为Optional[DeviceInfo]涉及 iOS 专属字段时建议先做isinstance判断以获得类型收窄。仓库中还有官方示例 device_locale/main.py 展示了利用(await page.get_device_info()).locales读取初始 locale 列表、并配合page.on_locale_change监听语言变化的用法可作为 i18n 场景的参考initial_locales (await page.get_device_info()).locales page.add(ft.Text(fInitial locales: {format_locales(initial_locales)}))底层调用链从 Python 到原生系统IosDeviceInfo的数据并非由 Python 侧生成而是完整的端到端链路Python 侧发起调用Page.get_device_info()调用_invoke_method(get_device_info)通过 Flet 协议将方法名发送到 Flutter 客户端page.py。Flutter 侧分发page.dart 中的case get_device_info: return await getDeviceInfo();将请求交给getDeviceInfo()。插件采集数据device_info.dart 中调用DeviceInfoPlugin().deviceInfo即device_info_plus插件获取平台原生数据在 iOS 分支第 85-109 行将插件的IosDeviceInfo字段逐一映射为 Maputsname的nodename/sysname等也在此完成重命名并额外附带locales来自PlatformDispatcher.instance.locales。Python 侧反序列化from_dict(IosDeviceInfo, info)依据 dataclass 的类型注解递归构造IosDeviceInfo与嵌套的IosUtsname对象。从源码结构可以推断Dart 侧的device_info_plus在 iOS 上会进一步调用UIDevicemodel、systemName、systemVersion、identifierForVendor、localizedModel、name、NSProcessInfoisiOSAppOnMac以及NSFileManager属性磁盘容量等原生 API。典型应用场景与注意事项判断真机 / 模拟器is_physical_device是区分真机与模拟器最直接的字段可用于在开发阶段隐藏仅真机可用的功能或上报统计时过滤模拟器数据info await page.get_device_info() if isinstance(info, ft.IosDeviceInfo): if not info.is_physical_device: page.add(ft.Text(当前运行在 iOS 模拟器中))系统版本适配system_version为字符串如18.0若需比较版本号建议先解析为数值再比较避免字符串字典序导致的误判。结合utsname.machine的硬件标识还可以做更细粒度的机型级适配。设备命名在 iOS 16 的差异按源码 docstring 的说明name字段在 iOS 16 及以后若工程缺少获取用户自定义设备名的 entitlement将返回通用设备名。因此不要把name当作持久化设备标识使用需要唯一标识时应考虑identifier_for_vendor注意它也可能为None。内存与磁盘单位不一致physical_ram_size/available_ram_size以MB计total_disk_size/free_disk_size以字节计。展示给用户前务必先换算例如磁盘字节数除以1024 ** 3得到 GB。Mac 上的 iOS 应用is_ios_app_on_mac用于识别运行在 Apple Silicon Mac 上的 iOS app 场景。这类环境在硬件资源、存储路径等方面与普通 iPhone 不同需要时可通过该字段分流处理。相关类型与延伸阅读嵌套类型IosUtsname的类型文档页iosutsname.md其字段同样来自sys/utsname.h标准。设备信息基类与全部平台子类AndroidDeviceInfo、MacOsDeviceInfo、LinuxDeviceInfo、WindowsDeviceInfo、WebDeviceInfo统一定义于 device_info.py。平台相关的其他类型文档可参见 types 目录其中包含androiddeviceinfo.md、linuxdeviceinfo.md等同类 API 引用页。Flet 移动端打包与真机/模拟器运行流程可参考 publish/ios.md 与 getting-started/testing-on-mobile.md。赞分享前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载相关推荐Flet Charts 交互事件详解LineChartEvent 的完整字段、事件类型与实战用法Flet Charts 交互事件详解LineChartEvent 的完整字段、事件类型与实战用法 LineChartEvent 是 Flet 图表扩展 fl前端跨平台桌面应用移动开发Flet IosUtsname 详解通过 POSIX utsname 读取 iOS 设备系统信息Flet IosUtsname 详解通过 POSIX utsname 读取 iOS 设备系统信息 IosUtsname 是 Flet 在 iOS/iPadOS前端跨平台桌面应用移动开发Flet ContextMenuDismissEvent 事件详解字段、触发时机与实战用法Flet ContextMenuDismissEvent 事件详解字段、触发时机与实战用法 ContextMenuDismissEvent 是 Flet 框架前端跨平台桌面应用移动开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

摄像头AE调试中Gain配置的三种模式与寄存器实操解析

摄像头AE调试中Gain配置的三种模式与寄存器实操解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 3:32:36 阅读更多 →
汽车电子底层软件开发:从MCU寄存器到AUTOSAR全链路实战

汽车电子底层软件开发:从MCU寄存器到AUTOSAR全链路实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 3:32:36 阅读更多 →
AirPods Pro在Win11延迟高?五种实测方案从280ms降到75ms

AirPods Pro在Win11延迟高?五种实测方案从280ms降到75ms

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 3:32:36 阅读更多 →

最新新闻

SSM计算机毕设之基于 SSM 的线上课程学习考评系统的设计与实现 基于 SSM 的网络化教育视频服务系统(完整前后端代码+说明文档+LW,调试定制等)

SSM计算机毕设之基于 SSM 的线上课程学习考评系统的设计与实现 基于 SSM 的网络化教育视频服务系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/24 4:05:53 阅读更多 →
【SSM课程设计/毕业设计】基于 SSM 的在线教学内容管理系统的设计与实现 基于 SSM 的教育培训视频阅览系统的设计与实现【附源码、数据库、万字文档】

【SSM课程设计/毕业设计】基于 SSM 的在线教学内容管理系统的设计与实现 基于 SSM 的教育培训视频阅览系统的设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/24 4:05:53 阅读更多 →
Prisma CLI 数据导出实战:`prisma export` 命令详解与底层实现原理

Prisma CLI 数据导出实战:`prisma export` 命令详解与底层实现原理

后端数据库GraphQL 【免费下载链接】prisma1 💾 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB) [deprecated] 项目地址: https://gitcode.com/gh_mirrors/pr/prisma1 点击查看 免费下载 本文围绕 Prisma 1.x 的 …

2026/9/24 4:05:53 阅读更多 →
电流采样电阻PCB布局:三种开尔文接法对比与0.1%精度实现

电流采样电阻PCB布局:三种开尔文接法对比与0.1%精度实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:05:53 阅读更多 →
【SSM毕业设计】基于 SSM 的线上教学资源共享系统的设计与实现 基于 SSM 的学生视频学习管理系统(源码+文档+远程调试,全bao定制等)

【SSM毕业设计】基于 SSM 的线上教学资源共享系统的设计与实现 基于 SSM 的学生视频学习管理系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/24 4:05:53 阅读更多 →
ESP32 上跑 WebAssembly:运行时如何把字节码翻译给 CPU

ESP32 上跑 WebAssembly:运行时如何把字节码翻译给 CPU

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:04:53 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →