FumadocsRN Device Geometry

Basic Example

Putting it all together

Basic Example

This example demonstrates how to fetch geometry data, display metrics, and render a cutout overlay.

import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
import { useDeviceGeometry } from 'react-native-device-geometry';
import { Svg, Path } from 'react-native-svg';

export default function App() {
  const geometry = useDeviceGeometry();

  if (!geometry) {
    return (
      <View style={styles.center}>
        <Text>Loading geometry...</Text>
      </View>
    );
  }

  const { metrics, cutouts } = geometry.mainDisplay;

  return (
    <View style={styles.container}>
      {/* Metrics Display */}
      <View style={styles.content}>
        <Text style={styles.title}>Device Geometry</Text>
        <Text>Width: {metrics.width}px</Text>
        <Text>Height: {metrics.height}px</Text>
        <Text>Scale: {metrics.scale}x</Text>
        <Text>Orientation: {metrics.orientation}</Text>
      </View>

      {/* Cutout Overlay */}
      <View style={StyleSheet.absoluteFill} pointerEvents="none">
        <Svg style={StyleSheet.absoluteFill}>
          {cutouts.cutouts.map((cutout, i) => (
            <Path
              key={i}
              d={cutout.svgPath}
              fill="rgba(255, 0, 0, 0.3)" // Semi-transparent red
            />
          ))}
        </Svg>
      </View>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#f5f5f5',
  },
  center: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
  content: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    gap: 10,
  },
  title: {
    fontSize: 24,
    fontWeight: 'bold',
    marginBottom: 20,
  },
});

On this page