android_nav_setting 0.0.2+2
android_nav_setting: ^0.0.2+2 copied to clipboard
It is used to fetch navigation setting selected on Android devices
android_nav_setting #
A Flutter plugin to detect the system navigation mode on Android devices, supporting identification of three-button navigation, two-button navigation, or gesture navigation. On iOS, it defaults to assuming gesture navigation is enabled.
Features #
- Retrieve the system navigation mode on Android devices using
Settings.Secure.NAVIGATION_MODE. - Methods to check if three-button navigation or gesture navigation is enabled.
- Cross-platform compatibility with a fallback for iOS (assumes gesture navigation).
- Lightweight and reliable across all Android OEMs (Samsung, Xiaomi, Huawei, etc.).
Getting Started #
To use this plugin in your Flutter project, add it to your pubspec.yaml:
dependencies:
android_nav_setting: ^0.0.2+1
Then, run flutter pub get to install the plugin.
Usage #
-
Import the plugin:
import 'package:android_nav_setting/android_nav_setting.dart'; -
Create an instance of
AndroidNavSetting:final navSetting = AndroidNavSetting(); -
Check navigation mode or specific navigation types:
// Get raw navigation mode (0: three-button, 1: two-button, 2: gesture) int mode = await navSetting.getNavigationMode(); print('Navigation Mode: $mode'); // Check if three-button navigation is enabled bool isThreeButton = await navSetting.isThreeButtonNavigationEnabled(); print('Three-Button Navigation: $isThreeButton'); // Check if gesture navigation is enabled bool isGesture = await navSetting.isGestureNavigationEnabled(); print('Gesture Navigation: $isGesture');
Platform Support #
- Android: Fully supported. Uses
Settings.Secure.NAVIGATION_MODEto determine the navigation mode, compatible with Android 10+ (API 29) and falls back to three-button navigation for older versions. - iOS: Returns gesture navigation (
mode 2) as a default, as modern iOS devices use gesture-based navigation.
Example #
The example directory contains a sample Flutter app demonstrating how to use this plugin to display the current navigation mode.
import 'package:flutter/material.dart';
import 'package:android_nav_setting/android_nav_setting.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _navigationStatus = 'Unknown';
final _androidNavSettingPlugin = AndroidNavSetting();
@override
void initState() {
super.initState();
initPlatformState();
}
Future<void> initPlatformState() async {
bool? isGestureEnabled;
try {
isGestureEnabled = await _androidNavSettingPlugin.isGestureNavigationEnabled();
_navigationStatus = isGestureEnabled ? 'Enabled' : 'Disabled';
} catch (e) {
_navigationStatus = 'Failed to get navigation status.';
}
if (!mounted) return;
setState(() {});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Text('Gesture Navigation: $_navigationStatus\n'),
),
),
);
}
}
Installation #
- Add the plugin to your
pubspec.yamlas shown above. - Ensure your Android project's
minSdkVersionis at least 21 (recommended for broad compatibility). - Run
flutter pub getand use the plugin as shown in the example.
Testing #
The plugin includes unit tests in the test directory to verify the platform channel and mock behavior. To run tests:
flutter test
Notes #
- Android Compatibility: Tested to work across all major Android OEMs (Samsung, Google, Xiaomi, etc.) using the standard AOSP
navigation_modesetting. - iOS Fallback: Since iOS does not support customizable navigation modes like Android, the plugin assumes gesture navigation (
mode 2) for iOS devices. - Error Handling: The plugin gracefully handles errors (e.g.,
MissingPluginExceptionorSettings.SettingNotFoundException) with appropriate fallbacks.
For more details on Flutter plugin development, see the Flutter documentation.