79779836

Date: 2025-10-01 09:04:38
Score: 1
Natty:
Report link

import 'package:flutter/material.dart';

import 'dart:async';

/// A wrapper widget that tracks user idle time

/// Prints "hello" after 15 minutes of continuous inactivity

class IdleTimeTracker extends StatefulWidget {

final Widget child;

final Duration idleDuration;

final VoidCallback? onIdleTimeout;

const IdleTimeTracker({

Key? key,

required this.child,

this.idleDuration = const Duration(minutes: 15),

this.onIdleTimeout,

}) : super(key: key);

@override

State<IdleTimeTracker> createState() => _IdleTimeTrackerState();

}

class _IdleTimeTrackerState extends State<IdleTimeTracker> {

Timer? _idleTimer;

DateTime _lastInteractionTime = DateTime.now();

@override

void initState() {

super.initState();

\_startIdleTimer();

}

@override

void dispose() {

\_idleTimer?.cancel();

super.dispose();

}

void _startIdleTimer() {

\_idleTimer?.cancel();

\_idleTimer = Timer(widget.idleDuration, \_onIdleTimeout);

}

void _onIdleTimeout() {

print('hello');

if (widget.onIdleTimeout != null) {

  widget.onIdleTimeout!();

}

}

void _resetIdleTimer() {

setState(() {

  \_lastInteractionTime = DateTime.now();

});

\_startIdleTimer();

}

@override

Widget build(BuildContext context) {

return Listener(

  onPointerDown: (\_) =\> \_resetIdleTimer(),

  onPointerMove: (\_) =\> \_resetIdleTimer(),

  onPointerUp: (\_) =\> \_resetIdleTimer(),

  child: GestureDetector(

    onTap: \_resetIdleTimer,

    onPanStart: (\_) =\> \_resetIdleTimer(),

    onScaleStart: (\_) =\> \_resetIdleTimer(),

    behavior: HitTestBehavior.translucent,

    child: widget.child,

  ),

);

}

}

// Example usage:

class MyApp extends StatelessWidget {

const MyApp({Key? key}) : super(key: key);

@override

Widget build(BuildContext context) {

return MaterialApp(

  home: IdleTimeTracker(

    idleDuration: const Duration(minutes: 15),

    onIdleTimeout: () {

      // Optional: Additional callback when idle timeout occurs

      print('User has been idle for 15 minutes!');

    },

    child: Scaffold(

      appBar: AppBar(

        title: const Text('Idle Time Tracker Demo'),

      ),

      body: Center(

        child: Column(

          mainAxisAlignment: MainAxisAlignment.center,

          children: \[

            const Text(

              'Interact with the screen',

              style: TextStyle(fontSize: 24),

            ),

            const SizedBox(height: 20),

            ElevatedButton(

              onPressed: () {

                print('Button pressed - timer reset');

              },

              child: const Text('Press Me'),

            ),

            const SizedBox(height: 20),

            const Text(

              'If you don\\'t interact for 15 minutes,\\n"hello" will be printed',

              textAlign: TextAlign.center,

              style: TextStyle(color: Colors.grey),

            ),

          \],

        ),

      ),

    ),

  ),

);

}

}

Reasons:
  • Long answer (-1):
  • Has code block (-0.5):
  • Contains question mark (0.5):
  • User mentioned (1): @override
  • User mentioned (0): @override
  • User mentioned (0): @override
  • User mentioned (0): @override
  • User mentioned (0): @override
  • Low reputation (1):
Posted by: flutter zip