AlwaysLoveme / capacitor-plugin-safe-area

capacitor plugin to get safeArea info on Android and IOS, support Capacitor6
MIT License
62 stars 14 forks source link
capacitor capacitor-plugin typescript

capacitor-plugin-safe-area

a capacitor plugin to get SafeArea info on Android and IOS, latest version is support for Capacitor v6.

Version Support

I'm very glad if the plugin helped you, please give it a star

Install

npm install capacitor-plugin-safe-area@latest
npx cap sync

Useage

import { SafeArea } from 'capacitor-plugin-safe-area';

SafeArea.getSafeAreaInsets().then(({ insets }) => {
  console.log(insets);
});

SafeArea.getStatusBarHeight().then(({ statusBarHeight }) => {
  console.log(statusBarHeight, 'statusbarHeight');
});

await SafeArea.removeAllListeners();

// when safe-area changed
await SafeArea.addListener('safeAreaChanged', data => {
  const { insets } = data;
  for (const [key, value] of Object.entries(insets)) {
    document.documentElement.style.setProperty(
      `--safe-area-inset-${key}`,
      `${value}px`,
    );
  }
});

Use with TailwindCSS

Use TailwindCSS with the plugin: https://github.com/mahyarmirrashed/tailwindcss-safe-area-capacitor

For more usage, please refer to the plugin repo

import {useEffect} from 'react';
import { SafeArea } from 'capacitor-plugin-safe-area';

import type {FC} from 'react';

const App = () => {
    useEffect(() => {
        (async function(){
            const safeAreaData = await SafeArea.getSafeAreaInsets();
            const {insets} = safeAreaData;
            for (const [key, value] of Object.entries(insets)) {
                document.documentElement.style.setProperty(
                    `--safe-area-inset-${key}`,
                    `${value}px`,
                );
            }
        })()
    }, []);
    return (
        <div className="pb-safe toolbar">
            <div>....</div>
        </div>
    )
}
export default App;

API

* [`getSafeAreaInsets()`](#getsafeareainsets) * [`getStatusBarHeight()`](#getstatusbarheight) * [`setImmersiveNavigationBar()`](#setimmersivenavigationbar) * [`addListener('safeAreaChanged', ...)`](#addlistenersafeareachanged-) * [`removeAllListeners()`](#removealllisteners) * [Interfaces](#interfaces) ### getSafeAreaInsets() ```typescript getSafeAreaInsets() => Promise ``` Get mobile SafeArea info **Returns:** Promise<SafeAreaInsets> -------------------- ### getStatusBarHeight() ```typescript getStatusBarHeight() => Promise ``` Get mobile statusbar height **Returns:** Promise<StatusBarInfo> -------------------- ### setImmersiveNavigationBar() ```typescript setImmersiveNavigationBar() => Promise ``` Set navigation bar immersive on Android , not implemented on IOS -------------------- ### addListener('safeAreaChanged', ...) ```typescript addListener(event: 'safeAreaChanged', listenerFunc: (data: SafeAreaInsets) => void) => Promise ``` Event listener when safe-area changed | Param | Type | | ------------------ | ---------------------------------------------------------------------------- | | **`event`** | 'safeAreaChanged' | | **`listenerFunc`** | (data: SafeAreaInsets) => void | **Returns:** Promise<PluginListenerHandle> -------------------- ### removeAllListeners() ```typescript removeAllListeners() => Promise ``` Remove all native listeners for this plugin -------------------- ### Interfaces #### SafeAreaInsets | Prop | Type | | ------------ | --------------------------------------------- | | **`insets`** | SafeArea | #### SafeArea | Prop | Type | | ------------ | ------------------- | | **`top`** | number | | **`right`** | number | | **`bottom`** | number | | **`left`** | number | #### StatusBarInfo | Prop | Type | | --------------------- | ------------------- | | **`statusBarHeight`** | number | #### PluginListenerHandle | Prop | Type | | ------------ | ----------------------------------------- | | **`remove`** | () => Promise<void> |