stack_wallet/lib/widgets/tor_subscription.dart
2023-09-13 10:11:14 -06:00

61 lines
1.7 KiB
Dart

import 'dart:async';
import 'package:event_bus/event_bus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:stackwallet/services/event_bus/events/global/tor_connection_status_changed_event.dart';
import 'package:stackwallet/services/event_bus/global_event_bus.dart';
class TorSubscription extends ConsumerStatefulWidget {
const TorSubscription({
super.key,
required this.onTorStatusChanged,
this.eventBus,
required this.child,
});
final Widget child;
final void Function(TorConnectionStatus) onTorStatusChanged;
final EventBus? eventBus;
@override
ConsumerState<TorSubscription> createState() => _TorSubscriptionBaseState();
}
class _TorSubscriptionBaseState extends ConsumerState<TorSubscription> {
/// The global event bus.
late final EventBus eventBus;
/// Subscription to the TorConnectionStatusChangedEvent.
late StreamSubscription<TorConnectionStatusChangedEvent>
_torConnectionStatusSubscription;
@override
void initState() {
// Initialize the global event bus.
eventBus = widget.eventBus ?? GlobalEventBus.instance;
// Subscribe to the TorConnectionStatusChangedEvent.
_torConnectionStatusSubscription =
eventBus.on<TorConnectionStatusChangedEvent>().listen(
(event) async {
widget.onTorStatusChanged.call(event.newStatus);
},
);
super.initState();
}
@override
void dispose() {
// Clean up the TorConnectionStatusChangedEvent subscription.
_torConnectionStatusSubscription.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return widget.child;
}
}