flutter_gesture_navigation 0.0.1 copy "flutter_gesture_navigation: ^0.0.1" to clipboard
flutter_gesture_navigation: ^0.0.1 copied to clipboard

A Flutter package for gesture-based navigation using device sensors (accelerometer, gyroscope, magnetometer).

example/lib/main.dart

import 'package:flutter/material.dart';
// ignore: depend_on_referenced_packages
import 'package:get/get.dart';
// ignore: depend_on_referenced_packages
import 'package:sensors_plus/sensors_plus.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      debugShowCheckedModeBanner: false,
      home: GestureDemo(),
      getPages: [
        GetPage(name: '/screen1', page: () => Screen1()),
        GetPage(name: '/screen2', page: () => Screen2()),
        GetPage(name: '/screen3', page: () => Screen3()),
        GetPage(name: '/screen4', page: () => Screen4()),
      ],
    );
  }
}

class GestureController extends GetxController {
  double threshold = 3.0; // Sensitivity for movement detection
  DateTime lastMoveTime = DateTime.now();

  void navigateByMovement(double x, double y, double z) {
    DateTime now = DateTime.now();
    if (now.difference(lastMoveTime).inMilliseconds < 700) {
      return; // Prevent rapid multiple detections
    }
    lastMoveTime = now;

    debugPrint("Movement Data: X=$x, Y=$y, Z=$z");

    // Determine dominant movement axis
    if ((x.abs() > y.abs())) {
      if (x > threshold) {
        debugPrint("Detected: Right Move");
        Get.snackbar("Right Move Detected", "Navigating to Screen 2");
        Get.toNamed('/screen2');
      } else if (x < -threshold) {
        debugPrint("Detected: Left Move");
        Get.snackbar("Left Move Detected", "Navigating to Screen 1");
        Get.toNamed('/screen1');
      }
    } else {
      if (y > threshold) {
        debugPrint("Detected: Up Move");
        Get.snackbar("Up Move Detected", "Navigating to Screen 3");
        Get.toNamed('/screen3');
      } else if (y < -threshold) {
        debugPrint("Detected: Down Move");
        Get.snackbar("Down Move Detected", "Navigating to Screen 4");
        Get.toNamed('/screen4');
      }
    }
  }
}

class GestureDemo extends StatefulWidget {
  @override
  _GestureDemoState createState() => _GestureDemoState();
}

class _GestureDemoState extends State<GestureDemo> {
  final GestureController gestureController = Get.put(GestureController());

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

    accelerometerEvents.listen((AccelerometerEvent event) {
      double x = event.x;
      double y = event.y;
      double z = event.z;

      gestureController.navigateByMovement(x, y, z);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Move Device to Navigate')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Icon(Icons.phone_android, size: 100, color: Colors.blue),
            SizedBox(height: 20),
            Text(
              'Move your phone Left, Right, Up, Down\nto navigate between screens.',
              textAlign: TextAlign.center,
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
          ],
        ),
      ),
    );
  }
}

class Screen1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Screen 1')),
      body: Center(
        child: Text('Left Move Detected', style: TextStyle(fontSize: 20)),
      ),
    );
  }
}

class Screen2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Screen 2')),
      body: Center(
        child: Text('Right Move Detected', style: TextStyle(fontSize: 20)),
      ),
    );
  }
}

class Screen3 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Screen 3')),
      body: Center(
        child: Text('Up Move Detected', style: TextStyle(fontSize: 20)),
      ),
    );
  }
}

class Screen4 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Screen 4')),
      body: Center(
        child: Text('Down Move Detected', style: TextStyle(fontSize: 20)),
      ),
    );
  }
}
0
likes
120
points
23
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package for gesture-based navigation using device sensors (accelerometer, gyroscope, magnetometer).

Documentation

API reference

License

MIT (license)

Dependencies

flutter, get, sensors_plus

More

Packages that depend on flutter_gesture_navigation