fluffychat/lib/pangea/activities/activity_aware_builder.dart
2025-06-17 11:25:15 -04:00

62 lines
1.3 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
class ActivityAwareBuilder extends StatefulWidget {
final DateTime? deadline;
final Widget Function(bool) builder;
const ActivityAwareBuilder({
super.key,
required this.builder,
this.deadline,
});
@override
State<ActivityAwareBuilder> createState() => ActivityAwareBuilderState();
}
class ActivityAwareBuilderState extends State<ActivityAwareBuilder> {
Timer? _timer;
@override
void initState() {
super.initState();
_setTimer();
}
@override
void didUpdateWidget(covariant ActivityAwareBuilder oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.deadline != widget.deadline) {
_setTimer();
}
}
@override
void dispose() {
_timer?.cancel();
super.dispose();
}
void _setTimer() {
final now = DateTime.now();
final delay = widget.deadline?.difference(now);
if (delay != null && delay > Duration.zero) {
_timer?.cancel();
_timer = Timer(delay, () {
_timer?.cancel();
_timer = null;
if (mounted) setState(() {});
});
}
}
@override
Widget build(BuildContext context) {
return widget.builder(
widget.deadline != null && widget.deadline!.isAfter(DateTime.now()),
);
}
}