Skip to content

Commit 9143ce8

Browse files
authored
keep selected wallet when switching tabs (#1085)
1 parent 48f96e8 commit 9143ce8

2 files changed

Lines changed: 37 additions & 23 deletions

File tree

app/lib/screens/market/market_screen.dart

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:threebotlogin/widgets/layout_drawer.dart';
33
import 'package:threebotlogin/screens/market/order_book.dart';
44
import 'package:threebotlogin/screens/market/overview.dart';
55
import 'package:flutter_riverpod/flutter_riverpod.dart';
6+
import 'package:threebotlogin/models/wallet.dart';
67

78
class MarketPage extends ConsumerStatefulWidget {
89
const MarketPage({super.key});
@@ -14,6 +15,8 @@ class MarketPage extends ConsumerStatefulWidget {
1415
class _MarketPageState extends ConsumerState<MarketPage>
1516
with SingleTickerProviderStateMixin {
1617
late final TabController _tabController;
18+
Wallet? _selectedWallet;
19+
1720
@override
1821
void initState() {
1922
super.initState();
@@ -26,6 +29,12 @@ class _MarketPageState extends ConsumerState<MarketPage>
2629
_tabController.dispose();
2730
}
2831

32+
void _onWalletSelected(Wallet wallet) {
33+
setState(() {
34+
_selectedWallet = wallet;
35+
});
36+
}
37+
2938
@override
3039
Widget build(BuildContext context) {
3140
return LayoutDrawer(
@@ -55,9 +64,12 @@ class _MarketPageState extends ConsumerState<MarketPage>
5564
Expanded(
5665
child: TabBarView(
5766
controller: _tabController,
58-
children: const [
59-
OverviewWidget(),
60-
OrderbookWidget(),
67+
children: [
68+
OverviewWidget(
69+
selectedWallet: _selectedWallet,
70+
onWalletSelected: _onWalletSelected,
71+
),
72+
const OrderbookWidget(),
6173
],
6274
),
6375
)

app/lib/screens/market/overview.dart

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,14 @@ import 'package:threebotlogin/widgets/market/wallet_selection.dart';
1212
import 'package:threebotlogin/services/stellar_service.dart' as Stellar;
1313

1414
class OverviewWidget extends ConsumerStatefulWidget {
15-
const OverviewWidget({super.key});
15+
final Wallet? selectedWallet;
16+
final Function(Wallet) onWalletSelected;
17+
18+
const OverviewWidget({
19+
super.key,
20+
this.selectedWallet,
21+
required this.onWalletSelected,
22+
});
1623

1724
@override
1825
ConsumerState<OverviewWidget> createState() => _OverviewWidgetState();
@@ -21,7 +28,6 @@ class OverviewWidget extends ConsumerStatefulWidget {
2128
class _OverviewWidgetState extends ConsumerState<OverviewWidget> {
2229
late Timer _timer;
2330
String lastUpdated = '--';
24-
Wallet? _selectedWallet;
2531
bool loading = true;
2632
bool failed = false;
2733
bool isLoadingWallets = false;
@@ -42,7 +48,6 @@ class _OverviewWidgetState extends ConsumerState<OverviewWidget> {
4248
setState(() {
4349
isLoadingWallets = true;
4450
loadingWalletsFailed = false;
45-
_selectedWallet = null;
4651
});
4752
try {
4853
await walletsNotifierRef.list();
@@ -66,7 +71,6 @@ class _OverviewWidgetState extends ConsumerState<OverviewWidget> {
6671
setState(() {
6772
isLoadingWallets = true;
6873
loadingWalletsFailed = false;
69-
_selectedWallet = null;
7074
});
7175

7276
final walletsNotifierRef = ref.read(walletsNotifier.notifier);
@@ -342,7 +346,7 @@ class _OverviewWidgetState extends ConsumerState<OverviewWidget> {
342346
MainAxisAlignment.spaceBetween,
343347
children: [
344348
Text(
345-
_selectedWallet?.name ??
349+
widget.selectedWallet?.name ??
346350
'Select Wallet',
347351
style: Theme.of(context)
348352
.textTheme
@@ -366,20 +370,20 @@ class _OverviewWidgetState extends ConsumerState<OverviewWidget> {
366370
child: SizedBox(
367371
height: 50,
368372
child: ElevatedButton(
369-
onPressed: _selectedWallet == null
373+
onPressed: widget.selectedWallet == null
370374
? null
371375
: () async {
372376
Navigator.of(context).push(
373377
MaterialPageRoute(
374378
builder: (context) =>
375379
OrderWidget(
376-
selectedWallet:
377-
_selectedWallet!,
380+
selectedWallet: widget
381+
.selectedWallet!,
378382
)));
379383
},
380384
child: Text(
381385
'My Orders',
382-
style: _selectedWallet == null
386+
style: widget.selectedWallet == null
383387
? Theme.of(context)
384388
.textTheme
385389
.bodyLarge!
@@ -463,7 +467,7 @@ class _OverviewWidgetState extends ConsumerState<OverviewWidget> {
463467
),
464468
),
465469
const SizedBox(height: 16),
466-
if (_selectedWallet != null)
470+
if (widget.selectedWallet != null)
467471
SizedBox(
468472
width: double.infinity,
469473
child: Card(
@@ -497,15 +501,15 @@ class _OverviewWidgetState extends ConsumerState<OverviewWidget> {
497501
children: [
498502
_buildMarketColumn(
499503
'TFT Balance',
500-
_selectedWallet
504+
widget.selectedWallet
501505
?.stellarBalances['TFT']!),
502506
_buildMarketColumn(
503507
'USDC Balance',
504-
_selectedWallet
508+
widget.selectedWallet
505509
?.stellarBalances['USDC']!),
506510
_buildMarketColumn(
507511
'XLM Balance',
508-
_selectedWallet
512+
widget.selectedWallet
509513
?.stellarBalances['XLM']!),
510514
],
511515
),
@@ -522,18 +526,18 @@ class _OverviewWidgetState extends ConsumerState<OverviewWidget> {
522526
child: SizedBox(
523527
width: MediaQuery.of(context).size.width - 40,
524528
child: ElevatedButton(
525-
onPressed: _selectedWallet == null
529+
onPressed: widget.selectedWallet == null
526530
? null
527531
: () async {
528532
Navigator.of(context).push(MaterialPageRoute(
529533
builder: (context) => BuyTFTWidget(
530-
wallet: _selectedWallet!,
534+
wallet: widget.selectedWallet!,
531535
edit: false,
532536
)));
533537
},
534538
child: Text(
535539
'Buy TFT',
536-
style: _selectedWallet == null
540+
style: widget.selectedWallet == null
537541
? Theme.of(context)
538542
.textTheme
539543
.bodyLarge!
@@ -655,11 +659,9 @@ class _OverviewWidgetState extends ConsumerState<OverviewWidget> {
655659
}
656660
return WalletSelectionSheet(
657661
wallets: filteredWallets,
658-
selectedWallet: _selectedWallet,
662+
selectedWallet: widget.selectedWallet,
659663
onWalletSelected: (Wallet wallet) {
660-
setState(() {
661-
_selectedWallet = wallet;
662-
});
664+
widget.onWalletSelected(wallet);
663665
Navigator.pop(context);
664666
},
665667
);

0 commit comments

Comments
 (0)