跳到主要内容
版本:v5

使用插件 API

在实现屏幕方向功能之前,先构建一个调用插件 API 的用户界面是合理的做法。本质上,我们需要搭建一个测试框架,以便快速验证各平台的功能一致性。

本教程重点在于如何构建 Capacitor 插件,而非 Ionic 框架应用开发,因此您可以直接获取以下文件的完整版本并复制到项目中:

复制完成后,使用 ionic serve 命令启动 Capacitor 应用。打开浏览器的开发者工具,您会看到以下错误:

Uncaught (in promise) ScreenOrientation does not have web implementation.

这个错误符合预期,因为我们尚未为任何平台实现代码。保持浏览器打开状态,我们将首先实现 Web 平台功能。在此之前,让我们先分析 Home.tsx 中的关键代码。

插件如何被调用?

追踪屏幕方向:

const [orientation, setOrientation] = useState<string>('');

orientation 状态变量用于存储屏幕方向值,可通过调用 setOrientation 更新。由于初始状态未知,默认设为空字符串。使用字符串类型便于 UI 选择对应设计方案。

当触发 screenOrientationChange 事件时,已注册的监听器会更新 orientation 值:

ScreenOrientation.addListener('screenOrientationChange', res =>
setOrientation(res.type),
);

UI 加载时获取当前屏幕方向,并在 DOM 移除时清除所有监听器:

useEffect(() => {
ScreenOrientation.orientation().then(res => setOrientation(res.type));

return () => {
ScreenOrientation.removeAllListeners();
};
}, []);

请注意不必深究 useEffect 和返回函数,这些是 React 特定的语法规则。

显示正确布局:

OrientationType 为竖屏方向提供两个值:portrait-primaryportrait-secondary,横屏方向同理。我们的 UI 只关心横竖方向,不区分具体子类型:

{
orientation.includes('portrait') &&
{
/* 显示可将屏幕旋转并锁定为横屏模式的按钮 */
};
}
{
orientation.includes('landscape') &&
{
/* 显示允许用户"签署"并通过确认按钮解锁屏幕方向的界面 */
};
}
**锁定与解锁屏幕方向:**

竖屏布局中的按钮点击后会切换并锁定屏幕方向:

```typescript
onClick={() => ScreenOrientation.lock({ orientation: "landscape-primary" })}

相应地,横屏布局中的按钮点击后会解除方向锁定:

onClick={() => ScreenOrientation.unlock()}

Home.tsxHome.css 中其余代码仅为样式设计,无需深入分析。执行 npm run build 确保新 UI 能在 iOS 或 Android 应用中使用。

现在我们已经构建好调用插件 API 的用户界面,接下来开始实现功能!下一步我们将首先针对 Web 平台:实现 Web 端功能。