mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-01-23 19:05:51 +00:00
single coin list for swap currency selection
This commit is contained in:
parent
3ab706424c
commit
bc90723c86
1 changed files with 124 additions and 192 deletions
|
@ -111,6 +111,7 @@ class _ExchangeCurrencySelectionViewState
|
|||
return currencies;
|
||||
}
|
||||
|
||||
if (mounted) {
|
||||
await showDialog<void>(
|
||||
context: context,
|
||||
builder: (context) => StackDialog(
|
||||
|
@ -124,13 +125,14 @@ class _ExchangeCurrencySelectionViewState
|
|||
label: "Retry",
|
||||
onPressed: () async {
|
||||
Navigator.of(context, rootNavigator: isDesktop).pop();
|
||||
_currencies =
|
||||
await _showUpdatingCurrencies(whileFuture: _loadCurrencies());
|
||||
_currencies = await _showUpdatingCurrencies(
|
||||
whileFuture: _loadCurrencies());
|
||||
setState(() {});
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
currencies.addAll(cn.value!);
|
||||
}
|
||||
|
@ -180,13 +182,13 @@ class _ExchangeCurrencySelectionViewState
|
|||
.where((e) =>
|
||||
e.name.toLowerCase().contains(text.toLowerCase()) ||
|
||||
e.ticker.toLowerCase().contains(text.toLowerCase()))
|
||||
.toList(growable: false);
|
||||
.toList();
|
||||
} else {
|
||||
if (text.isEmpty) {
|
||||
return _currencies
|
||||
.where((e) =>
|
||||
e.ticker.toLowerCase() != widget.pairedTicker!.toLowerCase())
|
||||
.toList(growable: false);
|
||||
.toList();
|
||||
}
|
||||
|
||||
return _currencies
|
||||
|
@ -194,7 +196,7 @@ class _ExchangeCurrencySelectionViewState
|
|||
e.ticker.toLowerCase() != widget.pairedTicker!.toLowerCase() &&
|
||||
(e.name.toLowerCase().contains(text.toLowerCase()) ||
|
||||
e.ticker.toLowerCase().contains(text.toLowerCase())))
|
||||
.toList(growable: false);
|
||||
.toList();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -328,18 +330,34 @@ class _ExchangeCurrencySelectionViewState
|
|||
height: 12,
|
||||
),
|
||||
Flexible(
|
||||
child: Builder(builder: (context) {
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
final coins = Coin.values.where((e) =>
|
||||
e.ticker.toLowerCase() != widget.pairedTicker?.toLowerCase());
|
||||
e.ticker.toLowerCase() !=
|
||||
widget.pairedTicker?.toLowerCase());
|
||||
|
||||
final items = filter(_searchString)
|
||||
.where((e) => coins
|
||||
final items = filter(_searchString);
|
||||
|
||||
final walletCoins = items
|
||||
.where((currency) => coins
|
||||
.where((coin) =>
|
||||
coin.ticker.toLowerCase() == e.ticker.toLowerCase())
|
||||
coin.ticker.toLowerCase() ==
|
||||
currency.ticker.toLowerCase())
|
||||
.isNotEmpty)
|
||||
.toList(growable: false);
|
||||
.toList();
|
||||
|
||||
// sort alphabetically by name
|
||||
items.sort((a, b) => a.name.compareTo(b.name));
|
||||
|
||||
// reverse sort walletCoins to prepare for next step
|
||||
walletCoins.sort((a, b) => b.name.compareTo(a.name));
|
||||
|
||||
// insert wallet coins at beginning
|
||||
for (final c in walletCoins) {
|
||||
items.remove(c);
|
||||
items.insert(0, c);
|
||||
}
|
||||
|
||||
return RoundedWhiteContainer(
|
||||
padding: const EdgeInsets.all(0),
|
||||
child: ListView.builder(
|
||||
|
@ -384,11 +402,13 @@ class _ExchangeCurrencySelectionViewState
|
|||
),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
crossAxisAlignment:
|
||||
CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
items[index].name,
|
||||
style: STextStyles.largeMedium14(context),
|
||||
style:
|
||||
STextStyles.largeMedium14(context),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 2,
|
||||
|
@ -413,96 +433,8 @@ class _ExchangeCurrencySelectionViewState
|
|||
},
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 20,
|
||||
),
|
||||
Text(
|
||||
"All coins",
|
||||
style: STextStyles.smallMed12(context),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 12,
|
||||
),
|
||||
Flexible(
|
||||
child: Builder(builder: (context) {
|
||||
final filtered = filter(_searchString);
|
||||
filtered.sort((a, b) => a.name.compareTo(b.name));
|
||||
return RoundedWhiteContainer(
|
||||
padding: const EdgeInsets.all(0),
|
||||
child: ListView.builder(
|
||||
shrinkWrap: true,
|
||||
primary: isDesktop ? false : null,
|
||||
itemCount: filtered.length,
|
||||
itemBuilder: (builderContext, index) {
|
||||
final bool hasImageUrl =
|
||||
filtered[index].image.startsWith("http");
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 4),
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.of(context).pop(filtered[index]);
|
||||
},
|
||||
child: RoundedWhiteContainer(
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 24,
|
||||
height: 24,
|
||||
child: isStackCoin(filtered[index].ticker)
|
||||
? getIconForTicker(
|
||||
filtered[index].ticker,
|
||||
size: 24,
|
||||
)
|
||||
: hasImageUrl
|
||||
? SvgPicture.network(
|
||||
filtered[index].image,
|
||||
width: 24,
|
||||
height: 24,
|
||||
placeholderBuilder: (_) =>
|
||||
const LoadingIndicator(),
|
||||
)
|
||||
: const SizedBox(
|
||||
width: 24,
|
||||
height: 24,
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
filtered[index].name,
|
||||
style: STextStyles.largeMedium14(context),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 2,
|
||||
),
|
||||
Text(
|
||||
filtered[index].ticker.toUpperCase(),
|
||||
style: STextStyles.smallMed12(context)
|
||||
.copyWith(
|
||||
color: Theme.of(context)
|
||||
.extension<StackColors>()!
|
||||
.textSubtitle1,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
|
Loading…
Reference in a new issue