flutter_xr 0.0.6 copy "flutter_xr: ^0.0.6" to clipboard
flutter_xr: ^0.0.6 copied to clipboard

Flutter XR plugin powered by the Android XR SDK build immersive 2D apps for Android XR .

example/lib/main.dart

import 'package:flutter/material.dart'  hide Alignment;
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:flutter_xr/flutter_xr.dart';
import 'package:flutter_xr_example/bottom_orbit.dart';
import 'package:flutter_xr_example/left_orbit.dart';
import 'package:flutter_xr_example/right_orbit.dart';
import 'package:flutter_xr_example/top_orbit.dart';
import 'package:intl/intl.dart';

final _flutterXrPlugin = FlutterXr();
ValueNotifier<String> leftOrbitListen = ValueNotifier<String>("");

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  print("Flutter Main");

  final appRoutes = await _flutterXrPlugin.registerRoutes(
    leftOrbit: Orbiter(
      ContentEdge.start,
      Alignment.centerVertically,
      OrbiterOffsetType.innerEdge,
      LeftOrbit(),
      width: 100,
      height: 100,
    ),
    rightOrbit: Orbiter(
      ContentEdge.end,
      Alignment.centerVertically,
      OrbiterOffsetType.innerEdge,
      RightOrbit(),
      width: 100,
      height: 100,
    ),
    topOrbit: Orbiter(
      ContentEdge.top,
      Alignment.centerHorizontally,
      OrbiterOffsetType.innerEdge,
      TopOrbit(
        onSearchChanged: (String value) {
          print("topOrbit $value");
          leftOrbitListen.value = value;
        },
      ),
      width: 100,
      height: 100,
    ),
    bottomOrbit: Orbiter(
      ContentEdge.bottom,
      Alignment.centerHorizontally,
      OrbiterOffsetType.innerEdge,
      BottomOrbit(),
      width: 100,
      height: 100,
    ),
  );

  runApp(
    MaterialApp(
      home: MyApp(),
      routes: appRoutes,
      debugShowCheckedModeBanner: false,
    ),
  );


}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isSpatialEnabled = false;
  String formattedDate1 = "";

  @override
  void initState() {
    super.initState();

    Timer.periodic(Duration(seconds: 1), (timer) {
      DateFormat customFormat = DateFormat("dd/MM/yyyy HH:mm:ss");
      formattedDate1 = customFormat.format(DateTime.now());
      setState(() {});
    });

    _flutterXrPlugin.listenEvents((event) {
      print("MyApp listenEvents $event");
      checkSpatialEnabled();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: SingleChildScrollView(
        child: Center(
          child: Column(
            children: [
              Text(
                'Local Time: $formattedDate1\n',
                style: TextStyle(fontSize: 30),
              ),
              Text(
                'isSpatialEnabled: $isSpatialEnabled\n',
                style: TextStyle(fontSize: 30),
              ),
              ValueListenableBuilder(
                valueListenable: leftOrbitListen,
                builder: (context, value, child) {
                  return Text(
                    'Text Input => ${leftOrbitListen.value}',
                    style: TextStyle(fontSize: 30),
                  );
                },
              ),
              Padding(
                padding: const EdgeInsets.all(32.0),
                child: ElevatedButton(
                  onPressed: () => checkSpatialEnabled(),
                  child: Text(
                    "Check Spatial Status",

                    style: TextStyle(fontSize: 30),
                  ),
                ),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: ElevatedButton(
                  onPressed: () => toggleSpatialFullScreen(),
                  child: Text(
                    isSpatialEnabled ? "Disable Spatial" : "Enable Spatial",
                    style: TextStyle(fontSize: 30),
                  ),
                ),
              ),
              Image.asset("assets/flutter-logo.png",height: 200,)
            ],
          ),
        ),
      ),
    );
  }

  Future<void> checkSpatialEnabled() async {
    print("checkSpatialEnabled1");
    try {
      isSpatialEnabled = await _flutterXrPlugin.isSpatialUiEnabled();
    } on PlatformException catch (e) {
      print(e);
    }

    if (!mounted) return;
    print("checkSpatialEnabled2  $isSpatialEnabled");

    setState(() {});
  }

  void toggleSpatialFullScreen() async {
    print("toggleSpatialFullScreen $isSpatialEnabled");
    if (isSpatialEnabled) {
      await _flutterXrPlugin.requestHomeSpaceMode();
    } else {
      await _flutterXrPlugin.requestFullSpaceMode();
    }
    print("toggleSpatialFullScreen 2");
  }
}
1
likes
130
points
322
downloads

Publisher

unverified uploader

Weekly Downloads

Flutter XR plugin powered by the Android XR SDK build immersive 2D apps for Android XR .

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on flutter_xr

Packages that implement flutter_xr