WebXR

Dart bindings for the WebXR APIs.

Overview

WebXR provides Dart bindings for the WebXR Device API, enabling developers to create immersive virtual reality (VR) and augmented reality (AR) experiences using Dart and web technologies.

Installation

Add this package to your pubspec.yaml:

dependencies:
  webxr: ^0.1.0

Then run:

dart pub get

Usage

Basic Example

 import 'dart:js_interop';

import 'package:web/web.dart' as web;
import 'package:webxr/webxr.dart';

void main() async {
  final body = web.document.body;

  if (body == null) {
    print('Body element not found');
    return;
  }

  body.append(web.document.createElement('div')..textContent = 'WebXR Example');

  final navigator = Navigator.$(web.window.navigator);
  final xr = navigator.xr;

  if (xr == null) {
    print('WebXR is not supported in this browser');
    return;
  }

  try {
    final vrSupported = await xr.isSessionSupported('immersive-vr'.toJS).toDart;
    body.append(web.document.createElement('div')
      ..textContent = 'Immersive VR supported: $vrSupported');

    final arSupported = await xr.isSessionSupported('immersive-ar'.toJS).toDart;
    body.append(web.document.createElement('div')
      ..textContent = 'Immersive AR supported: $arSupported');

    final inlineSupported = await xr.isSessionSupported('inline'.toJS).toDart;
    body.append(web.document.createElement('div')
      ..textContent = 'Inline mode supported: $inlineSupported');
  } catch (e) {
    body.append(web.document.createElement('div')
      ..textContent = 'Error checking WebXR support: $e');
  }
}

Development

This package provides type-safe Dart bindings for the WebXR APIs. The bindings are designed to work with Dart's dart:js_interop library for seamless JavaScript integration.

How the package is created

The bindings are generated using the packages

  • ts-ast-export: Generates a representation of a TypeScript definition file in JSON format.
  • ts_interop: Creates Dart bindings from the JSON file.

Both packages are work in progress.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

Changelog

See CHANGELOG.md for a detailed history of changes.

Libraries

webxr