refactor mobile status bar tor icon

This commit is contained in:
julian 2023-09-13 10:11:14 -06:00
parent 27a7861bad
commit b0f4476fc2
5 changed files with 148 additions and 147 deletions

View file

@ -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(

View file

@ -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.

View file

@ -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(

View 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);
},
),
);
}
}

View 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;
}
}