mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-02-02 19:26:37 +00:00
refactor mobile status bar tor icon
This commit is contained in:
parent
27a7861bad
commit
b0f4476fc2
5 changed files with 148 additions and 147 deletions
|
@ -20,13 +20,11 @@ import 'package:stackwallet/pages/home_view/sub_widgets/home_view_button_bar.dar
|
|||
import 'package:stackwallet/pages/notification_views/notifications_view.dart';
|
||||
import 'package:stackwallet/pages/settings_views/global_settings_view/global_settings_view.dart';
|
||||
import 'package:stackwallet/pages/settings_views/global_settings_view/hidden_settings.dart';
|
||||
import 'package:stackwallet/pages/settings_views/global_settings_view/tor_settings/tor_settings_view.dart';
|
||||
import 'package:stackwallet/pages/wallets_view/wallets_view.dart';
|
||||
import 'package:stackwallet/providers/global/notifications_provider.dart';
|
||||
import 'package:stackwallet/providers/ui/home_view_index_provider.dart';
|
||||
import 'package:stackwallet/providers/ui/unread_notifications_provider.dart';
|
||||
import 'package:stackwallet/services/event_bus/events/global/tor_connection_status_changed_event.dart';
|
||||
import 'package:stackwallet/services/tor_service.dart';
|
||||
import 'package:stackwallet/themes/stack_colors.dart';
|
||||
import 'package:stackwallet/themes/theme_providers.dart';
|
||||
import 'package:stackwallet/utilities/assets.dart';
|
||||
|
@ -35,6 +33,7 @@ import 'package:stackwallet/utilities/text_styles.dart';
|
|||
import 'package:stackwallet/widgets/animated_widgets/rotate_icon.dart';
|
||||
import 'package:stackwallet/widgets/background.dart';
|
||||
import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
|
||||
import 'package:stackwallet/widgets/small_tor_icon.dart';
|
||||
import 'package:stackwallet/widgets/stack_dialog.dart';
|
||||
|
||||
class HomeView extends ConsumerStatefulWidget {
|
||||
|
@ -219,54 +218,15 @@ class _HomeViewState extends ConsumerState<HomeView> {
|
|||
],
|
||||
),
|
||||
actions: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
const Padding(
|
||||
padding: EdgeInsets.only(
|
||||
top: 10,
|
||||
bottom: 10,
|
||||
right: 10,
|
||||
),
|
||||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel:
|
||||
"Tor Settings Button. Takes To Tor Settings Page.",
|
||||
key: const Key("walletsViewTorButton"),
|
||||
size: 36,
|
||||
shadows: const [],
|
||||
color: Theme.of(context)
|
||||
.extension<StackColors>()!
|
||||
.backgroundAppBar,
|
||||
icon: ref.watch(pTorService).enabled
|
||||
? ref.read(pTorService).proxyInfo.port == -1
|
||||
? SvgPicture.asset(
|
||||
Assets.svg.tor,
|
||||
color: Theme.of(context)
|
||||
.extension<StackColors>()!
|
||||
.accentColorYellow,
|
||||
width: 20,
|
||||
height: 20,
|
||||
)
|
||||
: SvgPicture.asset(
|
||||
Assets.svg.tor,
|
||||
color: Theme.of(context)
|
||||
.extension<StackColors>()!
|
||||
.accentColorGreen,
|
||||
width: 20,
|
||||
height: 20,
|
||||
)
|
||||
: SvgPicture.asset(
|
||||
Assets.svg.tor,
|
||||
color: Theme.of(context)
|
||||
.extension<StackColors>()!
|
||||
.textSubtitle3,
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
onPressed: () {
|
||||
Navigator.of(context)
|
||||
.pushNamed(TorSettingsView.routeName);
|
||||
},
|
||||
),
|
||||
child: SmallTorIcon(),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
|
|
|
@ -10,13 +10,11 @@
|
|||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:event_bus/event_bus.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:stackwallet/providers/global/prefs_provider.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';
|
||||
import 'package:stackwallet/services/tor_service.dart';
|
||||
import 'package:stackwallet/themes/stack_colors.dart';
|
||||
import 'package:stackwallet/utilities/assets.dart';
|
||||
|
@ -30,6 +28,7 @@ import 'package:stackwallet/widgets/custom_buttons/draggable_switch_button.dart'
|
|||
import 'package:stackwallet/widgets/desktop/secondary_button.dart';
|
||||
import 'package:stackwallet/widgets/rounded_white_container.dart';
|
||||
import 'package:stackwallet/widgets/stack_dialog.dart';
|
||||
import 'package:stackwallet/widgets/tor_subscription.dart';
|
||||
|
||||
class TorSettingsView extends ConsumerStatefulWidget {
|
||||
const TorSettingsView({Key? key}) : super(key: key);
|
||||
|
@ -280,7 +279,7 @@ class _TorIconState extends ConsumerState<TorIcon> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return _TorSubscriptionBase(
|
||||
return TorSubscription(
|
||||
onTorStatusChanged: (status) {
|
||||
setState(() {
|
||||
_status = status;
|
||||
|
@ -409,7 +408,7 @@ class _TorButtonState extends ConsumerState<TorButton> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return _TorSubscriptionBase(
|
||||
return TorSubscription(
|
||||
onTorStatusChanged: (status) {
|
||||
setState(() {
|
||||
_status = status;
|
||||
|
@ -448,61 +447,6 @@ class _TorButtonState extends ConsumerState<TorButton> {
|
|||
}
|
||||
}
|
||||
|
||||
class _TorSubscriptionBase extends ConsumerStatefulWidget {
|
||||
const _TorSubscriptionBase({
|
||||
super.key,
|
||||
required this.onTorStatusChanged,
|
||||
this.eventBus,
|
||||
required this.child,
|
||||
});
|
||||
|
||||
final Widget child;
|
||||
final void Function(TorConnectionStatus) onTorStatusChanged;
|
||||
final EventBus? eventBus;
|
||||
|
||||
@override
|
||||
ConsumerState<_TorSubscriptionBase> createState() =>
|
||||
_TorSubscriptionBaseState();
|
||||
}
|
||||
|
||||
class _TorSubscriptionBaseState extends ConsumerState<_TorSubscriptionBase> {
|
||||
/// 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;
|
||||
}
|
||||
}
|
||||
|
||||
/// Connect to the Tor network.
|
||||
///
|
||||
/// This method is called when the user taps the "Connect" button.
|
||||
|
|
|
@ -29,7 +29,6 @@ import 'package:stackwallet/pages/paynym/paynym_claim_view.dart';
|
|||
import 'package:stackwallet/pages/paynym/paynym_home_view.dart';
|
||||
import 'package:stackwallet/pages/receive_view/receive_view.dart';
|
||||
import 'package:stackwallet/pages/send_view/send_view.dart';
|
||||
import 'package:stackwallet/pages/settings_views/global_settings_view/tor_settings/tor_settings_view.dart';
|
||||
import 'package:stackwallet/pages/settings_views/wallet_settings_view/wallet_network_settings_view/wallet_network_settings_view.dart';
|
||||
import 'package:stackwallet/pages/settings_views/wallet_settings_view/wallet_settings_view.dart';
|
||||
import 'package:stackwallet/pages/special/firo_rescan_recovery_error_dialog.dart';
|
||||
|
@ -52,7 +51,6 @@ import 'package:stackwallet/services/event_bus/events/global/wallet_sync_status_
|
|||
import 'package:stackwallet/services/event_bus/global_event_bus.dart';
|
||||
import 'package:stackwallet/services/exchange/exchange_data_loading_service.dart';
|
||||
import 'package:stackwallet/services/mixins/paynym_wallet_interface.dart';
|
||||
import 'package:stackwallet/services/tor_service.dart';
|
||||
import 'package:stackwallet/themes/coin_icon_provider.dart';
|
||||
import 'package:stackwallet/themes/stack_colors.dart';
|
||||
import 'package:stackwallet/themes/theme_providers.dart';
|
||||
|
@ -73,6 +71,7 @@ import 'package:stackwallet/widgets/custom_buttons/blue_text_button.dart';
|
|||
import 'package:stackwallet/widgets/custom_loading_overlay.dart';
|
||||
import 'package:stackwallet/widgets/desktop/secondary_button.dart';
|
||||
import 'package:stackwallet/widgets/loading_indicator.dart';
|
||||
import 'package:stackwallet/widgets/small_tor_icon.dart';
|
||||
import 'package:stackwallet/widgets/stack_dialog.dart';
|
||||
import 'package:stackwallet/widgets/wallet_navigation_bar/components/icons/buy_nav_icon.dart';
|
||||
import 'package:stackwallet/widgets/wallet_navigation_bar/components/icons/coin_control_nav_icon.dart';
|
||||
|
@ -554,54 +553,15 @@ class _WalletViewState extends ConsumerState<WalletView> {
|
|||
],
|
||||
),
|
||||
actions: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
const Padding(
|
||||
padding: EdgeInsets.only(
|
||||
top: 10,
|
||||
bottom: 10,
|
||||
right: 10,
|
||||
),
|
||||
child: AspectRatio(
|
||||
aspectRatio: 1,
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel:
|
||||
"Tor Settings Button. Takes To Tor Settings Page.",
|
||||
key: const Key("walletsViewTorButton"),
|
||||
size: 36,
|
||||
shadows: const [],
|
||||
color: Theme.of(context)
|
||||
.extension<StackColors>()!
|
||||
.backgroundAppBar,
|
||||
icon: ref.watch(pTorService).enabled
|
||||
? ref.read(pTorService).proxyInfo.port == -1
|
||||
? SvgPicture.asset(
|
||||
Assets.svg.tor,
|
||||
color: Theme.of(context)
|
||||
.extension<StackColors>()!
|
||||
.accentColorYellow,
|
||||
width: 20,
|
||||
height: 20,
|
||||
)
|
||||
: SvgPicture.asset(
|
||||
Assets.svg.tor,
|
||||
color: Theme.of(context)
|
||||
.extension<StackColors>()!
|
||||
.accentColorGreen,
|
||||
width: 20,
|
||||
height: 20,
|
||||
)
|
||||
: SvgPicture.asset(
|
||||
Assets.svg.tor,
|
||||
color: Theme.of(context)
|
||||
.extension<StackColors>()!
|
||||
.textSubtitle3,
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
onPressed: () {
|
||||
Navigator.of(context)
|
||||
.pushNamed(TorSettingsView.routeName);
|
||||
},
|
||||
),
|
||||
child: SmallTorIcon(),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
|
|
76
lib/widgets/small_tor_icon.dart
Normal file
76
lib/widgets/small_tor_icon.dart
Normal file
|
@ -0,0 +1,76 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:stackwallet/pages/settings_views/global_settings_view/tor_settings/tor_settings_view.dart';
|
||||
import 'package:stackwallet/services/event_bus/events/global/tor_connection_status_changed_event.dart';
|
||||
import 'package:stackwallet/services/tor_service.dart';
|
||||
import 'package:stackwallet/themes/stack_colors.dart';
|
||||
import 'package:stackwallet/utilities/assets.dart';
|
||||
import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
|
||||
import 'package:stackwallet/widgets/tor_subscription.dart';
|
||||
|
||||
class SmallTorIcon extends ConsumerStatefulWidget {
|
||||
const SmallTorIcon({super.key});
|
||||
|
||||
@override
|
||||
ConsumerState<SmallTorIcon> createState() => _SmallTorIconState();
|
||||
}
|
||||
|
||||
class _SmallTorIconState extends ConsumerState<SmallTorIcon> {
|
||||
late TorConnectionStatus _status;
|
||||
|
||||
Color _color(
|
||||
TorConnectionStatus status,
|
||||
StackColors colors,
|
||||
) {
|
||||
switch (status) {
|
||||
case TorConnectionStatus.disconnected:
|
||||
return colors.textSubtitle3;
|
||||
|
||||
case TorConnectionStatus.connected:
|
||||
return colors.accentColorGreen;
|
||||
|
||||
case TorConnectionStatus.connecting:
|
||||
return colors.accentColorYellow;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_status = ref.read(pTorService).enabled
|
||||
? TorConnectionStatus.connected
|
||||
: TorConnectionStatus.disconnected;
|
||||
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return TorSubscription(
|
||||
onTorStatusChanged: (status) {
|
||||
setState(() {
|
||||
_status = status;
|
||||
});
|
||||
},
|
||||
child: AppBarIconButton(
|
||||
semanticsLabel: "Tor Settings Button. Takes To Tor Settings Page.",
|
||||
key: const Key("walletsViewTorButton"),
|
||||
size: 36,
|
||||
shadows: const [],
|
||||
color: Theme.of(context).extension<StackColors>()!.backgroundAppBar,
|
||||
icon: SvgPicture.asset(
|
||||
Assets.svg.tor,
|
||||
color: _color(
|
||||
_status,
|
||||
Theme.of(context).extension<StackColors>()!,
|
||||
),
|
||||
width: 20,
|
||||
height: 20,
|
||||
),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pushNamed(TorSettingsView.routeName);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
61
lib/widgets/tor_subscription.dart
Normal file
61
lib/widgets/tor_subscription.dart
Normal file
|
@ -0,0 +1,61 @@
|
|||
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;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue