SuperAPI AI 工具集

iphone-duo-flutter

通用与其它

查看项目

更新于 10-16 06:48

技能介绍

用途:帮助 Flutter 应用适配 iPhone Duo(苹果首款折叠 iPhone)。核心前提是 Flutter 的折叠抽象为 Android 设计,MediaQuery.displayFeatures 在 iPhone Duo 上始终返回空列表,dual_screen 包(TwoPane、hingeAngleEvents)实际也仅支持 Android,因此开箱即用没有折叠感知能力。

第一层(纯 Dart,无需原生代码):用 LayoutBuilder 与 BoxConstraints 做布局决策;需要窗口尺寸时用 MediaQuery.sizeOf(context) 而非 MediaQuery.of(context),因为 sizeOf/paddingOf 只在实际读取的属性变化时重建;不要在 initState 或字段中缓存尺寸。处理非对称安全区:MediaQuery.paddingOf(context) 返回的 EdgeInsets 四边独立,形如 width - padding.left * 2 的写法在该设备上是缺陷,优先用 SafeArea,需要背景出血时把背景放在 SafeArea 外、交互前景放在内。用尺寸类思路替代断点:外屏为 compact 宽、内屏为 regular 宽,可参考 Material 3 窗口尺寸类(compact < 600,medium 600–840,expanded ≥ 840 逻辑像素);应基于拿到的约束分支,而非 Platform.isIOS、设备型号字符串或 MediaQuery.orientationOf,因为内屏不遵循支持的方向。宽布局用 NavigationRail、窄布局用 NavigationBar。

第二层(需平台通道):真正 iPhone Duo 专属能力在 Dart 中不可用,需自行桥接。值得桥接的原生 API(iOS 27.1)包括 UIView 上的 reservedRegions(kind:)、UIHingeInteraction 的连续铰链角度、traitCollection 的尺寸类。一次性查询用 MethodChannel,连续数据(铰链角度)用 EventChannel。在 Runner target 的 FlutterViewController 上注册通道,区域序列化为普通 map(left、top、width、height、kind、active),变化时推送而非轮询。必须做降级保护:非折叠设备上铰链为 nil,这些 API 在 iOS 27.1 以下不存在,桥接应退化为“无区域、无铰链”而非抛异常。拿到区域后接入同一套约束驱动布局,division 区域(折叠处)避免放交互控件,occlusion 区域(摄像头)避免遮挡。

建议顺序:先让应用在 LayoutBuilder 下干净缩放;审查所有对称内边距计算;用约束分支替换方向与平台判断;加入 rail/bar 分栏;确有折叠感知需求再写通道。前四步同时改善平板与桌面表现,第五步才需 Xcode 27.1 模拟器测试。资料未提供具体收费、价格或平台支持范围等信息。