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

Flutter Time Guard is used to detect system time changes and validate device time using NTP, ensuring reliable and secure time-sensitive operations.

πŸ›‘ Flutter Time Guard πŸ›‘ #

A Flutter plugin to detect system Date/Time and Time zone changes and validate device time against NTP (Network Time Protocol).

Ideal for time-sensitive applications like authentication, licenses, time tracking, and fraud prevention.

✨ Features #

  • ⏰ Detect manual changes to the device's date or time.
  • 🌐 Validate device time against reliable NTP servers with customizable tolerance for time deviation.

Demo

πŸ”§ Installation #

flutter pub add flutter_time_guard

πŸš€ Usage #

  1. Validate System Time
import 'package:flutter_time_guard/flutter_time_guard.dart';

final isValid = await FlutterTimeGuard.isDateTimeValid(toleranceInSeconds: 10); 
print('Is time valid? $isValid');
  1. Listen to Manual Date/Time and Time zone Changes
FlutterTimeGuard.listenToDateTimeChange(
 onTimeChanged: () {
    // Show a warning dialog or alert user
    print('User manually changed the system time.');
  },
  stopListeingAfterFirstChange:true, // stop listening after first change
);

πŸ’‘ Example #

import 'package:flutter/material.dart';
import 'package:flutter_time_guard/flutter_time_guard.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(home: TimeGuardDemoPage());
  }
}

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

  @override
  State<TimeGuardDemoPage> createState() => _TimeGuardDemoPageState();
}

class _TimeGuardDemoPageState extends State<TimeGuardDemoPage> {
  bool? _isValid;
  bool _isLoading = false;

  Future<void> _checkTimeValidity() async {
    setState(() => _isLoading = true);
    final result = await FlutterTimeGuard.isDateTimeValid(); 
    setState(() {
      _isValid = result;
      _isLoading = false;
    });
  }

  String _getMessage() {
    if (_isValid == null) return 'Press the button to check time validity';
    return _isValid! ? 'βœ… Device time is valid' : '❌ Device time is invalid';
  }

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      FlutterTimeGuard.listenToDateTimeChange(
        onTimeChanged: () {
          showAdaptiveDialog(
            context: context,
            builder: (context) => AlertDialog(
              title: const Text(
                'User changed the date or the Time',
                textAlign: TextAlign.center,
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
              content: const Text(
                'This may affect the functionality of the app. Please ensure the system time is correct.',
              ),
              actions: [
                TextButton(
                  onPressed: () => Navigator.of(context).pop(),
                  child: const Text('OK'),
                ),
              ],
            ),
          );
        },
        stopListeingAfterFirstChange: true,
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('FlutterTimeGuard Example'),
        centerTitle: true,
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(24.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                _getMessage(),
                style: const TextStyle(fontSize: 18),
                textAlign: TextAlign.center,
              ),
              const SizedBox(height: 24),
              _isLoading
                  ? const CircularProgressIndicator()
                  : ElevatedButton(
                      onPressed: _checkTimeValidity,
                      child: const Text('Check Time Validity'),
                    ),
            ],
          ),
        ),
      ),
    );
  }
}

πŸ§ͺ TODO #

  • Add unit and integration tests
  • Provide more configuration options

πŸ™Œ Contributions #

Contributions are welcome! Please feel free to submit issues or pull requests.

πŸ“¬ Contact #

Check my profile.

14
likes
160
points
394
downloads

Publisher

unverified uploader

Weekly Downloads

Flutter Time Guard is used to detect system time changes and validate device time using NTP, ensuring reliable and secure time-sensitive operations.

Homepage
Repository (GitHub)
View/report issues

Topics

#time #ntp #datetime #security

Documentation

Documentation
API reference

License

MIT (license)

Dependencies

flutter, flutter_secure_storage, ntp, plugin_platform_interface

More

Packages that depend on flutter_time_guard

Packages that implement flutter_time_guard