mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-26 06:08:40 +01:00
* charts (wip) * charts (wip) * wip * add asset grid * split files * logic wip * proper getPrices logic * viewmodel (wip) * charts * remove unused import * remove restricted import...? * fix background gradient when scrolling * add safeguards for broken db * save new pin on removal * add safeguards for concurrency * add haptic feedback * fix haptic feedback * fix fiat ticker * reduce chart padding * add line touch indicator * improve touch target size on range selector * add date/time display when viewing past amount * merge * remove iconSvgPath reference * merge * fix state for date display * merge * auto-reformat * only load charts when page is opened * merge * reformat and apply lints * refactor to use `Money` instead of storing amount in `String` * add slop comment * fix exception on division by zero * ci * workaround toDouble being removed * disable strict parsing and rounding * fix abs() * use new currency picker sheet * safeguard for max flutter-supported decimals * fix amount precision * adjust to new buy/sell * Update lib/new-ui/pages/charts_page.dart Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com> * adjust buy/sell di * replace -> ignore * reformat --------- Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
1159 lines
33 KiB
Dart
1159 lines
33 KiB
Dart
import 'package:cw_core/amount/money.dart';
|
||
import 'package:cw_core/currency.dart';
|
||
import 'package:cw_core/currency_groups.dart';
|
||
import 'package:cw_core/enumerable_item.dart';
|
||
import 'package:collection/collection.dart';
|
||
import 'package:cw_core/format_fixed.dart';
|
||
|
||
class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implements Currency {
|
||
const CryptoCurrency({
|
||
String title = '',
|
||
int raw = -1,
|
||
required this.name,
|
||
required this.decimals,
|
||
this.fullName,
|
||
this.iconPath,
|
||
this.flatIconPath,
|
||
this.tag,
|
||
this.chainIconPath,
|
||
this.enabled = false,
|
||
this.isPotentialScam = false,
|
||
this.groups = const {},
|
||
}) : super(title: title, raw: raw);
|
||
|
||
final String? flatIconPath;
|
||
final String? chainIconPath;
|
||
final bool enabled;
|
||
final bool isPotentialScam;
|
||
final Set<String> groups;
|
||
|
||
@override
|
||
final String name;
|
||
|
||
@override
|
||
final String? fullName;
|
||
|
||
@override
|
||
final String? tag;
|
||
|
||
@override
|
||
final String? iconPath;
|
||
|
||
@override
|
||
final int decimals;
|
||
|
||
@override
|
||
String get symbol => title;
|
||
@override
|
||
String get apiString => "crypto.$title";
|
||
|
||
set enabled(bool value) => this.enabled = value;
|
||
|
||
static const all = [
|
||
CryptoCurrency.xmr,
|
||
CryptoCurrency.btc,
|
||
CryptoCurrency.btcln,
|
||
CryptoCurrency.eth,
|
||
CryptoCurrency.ltc,
|
||
CryptoCurrency.doge,
|
||
CryptoCurrency.usdterc20,
|
||
CryptoCurrency.usdtbsc,
|
||
CryptoCurrency.usdttrc20,
|
||
CryptoCurrency.usdc,
|
||
CryptoCurrency.deuro,
|
||
CryptoCurrency.maticpoly,
|
||
CryptoCurrency.sol,
|
||
CryptoCurrency.trx,
|
||
CryptoCurrency.bch,
|
||
CryptoCurrency.ada,
|
||
CryptoCurrency.bnb,
|
||
CryptoCurrency.dai,
|
||
CryptoCurrency.dash,
|
||
CryptoCurrency.eos,
|
||
CryptoCurrency.nano,
|
||
CryptoCurrency.xlm,
|
||
CryptoCurrency.xrp,
|
||
CryptoCurrency.xhv,
|
||
CryptoCurrency.ape,
|
||
CryptoCurrency.avaxc,
|
||
CryptoCurrency.btt,
|
||
CryptoCurrency.bttc,
|
||
CryptoCurrency.firo,
|
||
CryptoCurrency.usdt,
|
||
CryptoCurrency.hbar,
|
||
CryptoCurrency.sc,
|
||
CryptoCurrency.usdcsol,
|
||
CryptoCurrency.zec,
|
||
CryptoCurrency.zen,
|
||
CryptoCurrency.xvg,
|
||
CryptoCurrency.usdcpoly,
|
||
CryptoCurrency.dcr,
|
||
CryptoCurrency.kmd,
|
||
CryptoCurrency.mana,
|
||
CryptoCurrency.matic,
|
||
CryptoCurrency.mkr,
|
||
CryptoCurrency.near,
|
||
CryptoCurrency.oxt,
|
||
CryptoCurrency.paxg,
|
||
CryptoCurrency.pivx,
|
||
CryptoCurrency.rune,
|
||
CryptoCurrency.rvn,
|
||
CryptoCurrency.scrt,
|
||
CryptoCurrency.uni,
|
||
CryptoCurrency.stx,
|
||
CryptoCurrency.shib,
|
||
CryptoCurrency.aave,
|
||
CryptoCurrency.arb,
|
||
CryptoCurrency.bat,
|
||
CryptoCurrency.comp,
|
||
CryptoCurrency.cro,
|
||
CryptoCurrency.ens,
|
||
CryptoCurrency.ftm,
|
||
CryptoCurrency.frax,
|
||
CryptoCurrency.gusd,
|
||
CryptoCurrency.gtc,
|
||
CryptoCurrency.grt,
|
||
CryptoCurrency.ldo,
|
||
CryptoCurrency.nexo,
|
||
CryptoCurrency.cake,
|
||
CryptoCurrency.pepe,
|
||
CryptoCurrency.storj,
|
||
CryptoCurrency.tusd,
|
||
CryptoCurrency.wbtc,
|
||
CryptoCurrency.weth,
|
||
CryptoCurrency.zrx,
|
||
CryptoCurrency.dydx,
|
||
CryptoCurrency.steth,
|
||
CryptoCurrency.banano,
|
||
CryptoCurrency.usdtPoly,
|
||
CryptoCurrency.usdcEPoly,
|
||
CryptoCurrency.kaspa,
|
||
CryptoCurrency.digibyte,
|
||
CryptoCurrency.usdtSol,
|
||
CryptoCurrency.usdcTrc20,
|
||
CryptoCurrency.tbtc,
|
||
CryptoCurrency.wow,
|
||
CryptoCurrency.zano,
|
||
CryptoCurrency.ton,
|
||
CryptoCurrency.flip,
|
||
CryptoCurrency.ndeps,
|
||
CryptoCurrency.deps,
|
||
CryptoCurrency.baseEth,
|
||
CryptoCurrency.usde,
|
||
CryptoCurrency.arbEth,
|
||
CryptoCurrency.usdcArb,
|
||
CryptoCurrency.usdtArb,
|
||
];
|
||
|
||
static const havenCurrencies = [
|
||
xag,
|
||
xau,
|
||
xaud,
|
||
xbtc,
|
||
xcad,
|
||
xchf,
|
||
xcny,
|
||
xeur,
|
||
xgbp,
|
||
xjpy,
|
||
xnok,
|
||
xnzd,
|
||
xusd,
|
||
];
|
||
|
||
// well technically not currencies but since we had them a long time ago and don't want to break
|
||
// the app for users who had contacts saved for them
|
||
static const zcashCurrencies = [zec, zaddr, tzec];
|
||
|
||
// title, tag (if applicable), fullName (if unique), raw, name, iconPath
|
||
static const xmr = CryptoCurrency(
|
||
title: 'XMR',
|
||
fullName: 'Monero',
|
||
raw: 0,
|
||
name: 'xmr',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/monero.svg',
|
||
decimals: 12,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/monero.svg");
|
||
static const ada = CryptoCurrency(
|
||
title: 'ADA',
|
||
fullName: 'Cardano',
|
||
raw: 1,
|
||
name: 'ada',
|
||
iconPath: 'assets/images/ada_icon.png',
|
||
decimals: 6);
|
||
static const bch = CryptoCurrency(
|
||
title: 'BCH',
|
||
fullName: 'Bitcoin Cash',
|
||
raw: 2,
|
||
name: 'bch',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/bitcoin-cash.svg',
|
||
decimals: 8,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/bitcoin_cash.svg");
|
||
static const bnb = CryptoCurrency(
|
||
title: 'BNB',
|
||
tag: 'BSC',
|
||
fullName: 'BNB',
|
||
raw: 3,
|
||
name: 'bnb',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/bnb.svg',
|
||
decimals: 18,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/bnb.svg",
|
||
chainIconPath: "assets/new-ui/chain_badges/bnb.svg");
|
||
static const btc = CryptoCurrency(
|
||
title: 'BTC',
|
||
fullName: 'Bitcoin',
|
||
raw: 4,
|
||
name: 'btc',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/bitcoin.svg',
|
||
decimals: 8,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/bitcoin.svg");
|
||
static const dai = CryptoCurrency(
|
||
title: 'DAI',
|
||
tag: 'ETH',
|
||
fullName: 'Dai',
|
||
raw: 5,
|
||
name: 'dai',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/dai.svg',
|
||
decimals: 18,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const dash = CryptoCurrency(
|
||
title: 'DASH',
|
||
fullName: 'Dash',
|
||
raw: 6,
|
||
name: 'dash',
|
||
iconPath: 'assets/images/dash_icon.png',
|
||
decimals: 8);
|
||
static const eos = CryptoCurrency(
|
||
title: 'EOS',
|
||
fullName: 'EOS',
|
||
raw: 7,
|
||
name: 'eos',
|
||
iconPath: 'assets/images/eos_icon.png',
|
||
decimals: 4);
|
||
static const eth = CryptoCurrency(
|
||
title: 'ETH',
|
||
fullName: 'Ethereum',
|
||
raw: 8,
|
||
name: 'eth',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg',
|
||
decimals: 18,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/ethereum.svg",
|
||
chainIconPath: "assets/new-ui/chain_badges/ethereum.svg");
|
||
static const ltc = CryptoCurrency(
|
||
title: 'LTC',
|
||
fullName: 'Litecoin',
|
||
raw: 9,
|
||
name: 'ltc',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/litecoin.svg',
|
||
decimals: 8,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/litecoin.svg",
|
||
chainIconPath: "assets/new-ui/chain_badges/mweb.svg");
|
||
static const nano = CryptoCurrency(
|
||
title: 'XNO',
|
||
fullName: 'Nano',
|
||
raw: 10,
|
||
name: 'xno',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/nano.svg',
|
||
decimals: 30,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/nano.svg");
|
||
static const trx = CryptoCurrency(
|
||
title: 'TRX',
|
||
fullName: 'TRON',
|
||
raw: 11,
|
||
name: 'trx',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/tron.svg',
|
||
decimals: 6,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/tron.svg",
|
||
chainIconPath: "assets/new-ui/chain_badges/tron.svg");
|
||
static const usdt = CryptoCurrency(
|
||
title: 'USDT',
|
||
tag: 'OMNI',
|
||
fullName: 'Tether',
|
||
raw: 12,
|
||
name: 'usdt',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
|
||
decimals: 6,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const usdterc20 = CryptoCurrency(
|
||
title: 'USDT',
|
||
tag: 'ETH',
|
||
fullName: 'Tether',
|
||
raw: 13,
|
||
name: 'usdterc20',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
|
||
decimals: 6,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const xlm = CryptoCurrency(
|
||
title: 'XLM',
|
||
fullName: 'Stellar',
|
||
raw: 14,
|
||
name: 'xlm',
|
||
iconPath: 'assets/images/xlm_icon.png',
|
||
decimals: 7);
|
||
static const xrp = CryptoCurrency(
|
||
title: 'XRP',
|
||
fullName: 'Ripple',
|
||
raw: 15,
|
||
name: 'xrp',
|
||
iconPath: 'assets/images/xrp_icon.png',
|
||
decimals: 6);
|
||
static const xhv = CryptoCurrency(
|
||
title: 'XHV',
|
||
fullName: 'Haven Protocol',
|
||
raw: 16,
|
||
name: 'xhv',
|
||
iconPath: 'assets/images/xhv_logo.png',
|
||
decimals: 12);
|
||
|
||
static const xag = CryptoCurrency(title: 'XAG', tag: 'XHV', raw: 17, name: 'xag', decimals: 12);
|
||
static const xau = CryptoCurrency(title: 'XAU', tag: 'XHV', raw: 18, name: 'xau', decimals: 12);
|
||
static const xaud =
|
||
CryptoCurrency(title: 'XAUD', tag: 'XHV', raw: 19, name: 'xaud', decimals: 12);
|
||
static const xbtc =
|
||
CryptoCurrency(title: 'XBTC', tag: 'XHV', raw: 20, name: 'xbtc', decimals: 12);
|
||
static const xcad =
|
||
CryptoCurrency(title: 'XCAD', tag: 'XHV', raw: 21, name: 'xcad', decimals: 12);
|
||
static const xchf =
|
||
CryptoCurrency(title: 'XCHF', tag: 'XHV', raw: 22, name: 'xchf', decimals: 12);
|
||
static const xcny =
|
||
CryptoCurrency(title: 'XCNY', tag: 'XHV', raw: 23, name: 'xcny', decimals: 12);
|
||
static const xeur =
|
||
CryptoCurrency(title: 'XEUR', tag: 'XHV', raw: 24, name: 'xeur', decimals: 12);
|
||
static const xgbp =
|
||
CryptoCurrency(title: 'XGBP', tag: 'XHV', raw: 25, name: 'xgbp', decimals: 12);
|
||
static const xjpy =
|
||
CryptoCurrency(title: 'XJPY', tag: 'XHV', raw: 26, name: 'xjpy', decimals: 12);
|
||
static const xnok =
|
||
CryptoCurrency(title: 'XNOK', tag: 'XHV', raw: 27, name: 'xnok', decimals: 12);
|
||
static const xnzd =
|
||
CryptoCurrency(title: 'XNZD', tag: 'XHV', raw: 28, name: 'xnzd', decimals: 12);
|
||
static const xusd =
|
||
CryptoCurrency(title: 'XUSD', tag: 'XHV', raw: 29, name: 'xusd', decimals: 12);
|
||
|
||
static const ape = CryptoCurrency(
|
||
title: 'APE',
|
||
tag: 'ETH',
|
||
fullName: 'ApeCoin',
|
||
raw: 30,
|
||
name: 'ape',
|
||
iconPath: 'assets/images/ape_icon.png',
|
||
decimals: 18);
|
||
static const avaxc = CryptoCurrency(
|
||
title: 'AVAX',
|
||
tag: 'AVAXC',
|
||
fullName: 'Avalanche',
|
||
raw: 31,
|
||
name: 'avaxc',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/avax.svg',
|
||
decimals: 9);
|
||
static const btt = CryptoCurrency(
|
||
title: 'BTT',
|
||
tag: 'ETH',
|
||
fullName: 'BitTorrent',
|
||
raw: 32,
|
||
name: 'btt',
|
||
iconPath: 'assets/images/btt_icon.png',
|
||
decimals: 18);
|
||
static const bttc = CryptoCurrency(
|
||
title: 'BTTC',
|
||
tag: 'TRX',
|
||
fullName: 'BitTorrent-NEW',
|
||
raw: 33,
|
||
name: 'bttc',
|
||
iconPath: 'assets/images/btt_icon.png',
|
||
decimals: 18);
|
||
static const doge = CryptoCurrency(
|
||
title: 'DOGE',
|
||
fullName: 'Dogecoin',
|
||
raw: 34,
|
||
name: 'doge',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/dogecoin.svg',
|
||
decimals: 8,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/dogecoin.svg");
|
||
static const firo = CryptoCurrency(
|
||
title: 'FIRO', raw: 35, name: 'firo', iconPath: 'assets/images/firo_icon.png', decimals: 8);
|
||
static const usdttrc20 = CryptoCurrency(
|
||
title: 'USDT',
|
||
tag: 'TRX',
|
||
fullName: 'Tether',
|
||
raw: 36,
|
||
name: 'usdttrc20',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
|
||
decimals: 6,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const hbar = CryptoCurrency(
|
||
title: 'HBAR',
|
||
fullName: 'Hedera',
|
||
raw: 37,
|
||
name: 'hbar',
|
||
iconPath: 'assets/images/hbar_icon.png',
|
||
decimals: 8);
|
||
static const sc = CryptoCurrency(
|
||
title: 'SC',
|
||
fullName: 'Siacoin',
|
||
raw: 38,
|
||
name: 'sc',
|
||
iconPath: 'assets/images/sc_icon.png',
|
||
decimals: 16);
|
||
static const sol = CryptoCurrency(
|
||
title: 'SOL',
|
||
fullName: 'Solana',
|
||
raw: 39,
|
||
name: 'sol',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/solana.svg',
|
||
decimals: 9,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/solana.svg",
|
||
chainIconPath: "assets/new-ui/chain_badges/solana.svg");
|
||
static const usdc = CryptoCurrency(
|
||
title: 'USDC',
|
||
tag: 'ETH',
|
||
fullName: 'USDC',
|
||
raw: 40,
|
||
name: 'usdc',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
|
||
decimals: 6,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const usdcsol = CryptoCurrency(
|
||
title: 'USDC',
|
||
tag: 'SOL',
|
||
fullName: 'USDC Coin',
|
||
raw: 41,
|
||
name: 'usdcsol',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
|
||
decimals: 6,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const zaddr = CryptoCurrency(
|
||
title: 'ZZEC',
|
||
tag: 'ZEC',
|
||
fullName: 'Shielded Zcash',
|
||
raw: 42,
|
||
name: 'zaddr',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/zcash.svg',
|
||
decimals: 8);
|
||
static const tzec = CryptoCurrency(
|
||
title: 'tZEC',
|
||
tag: 'ZEC',
|
||
fullName: 'Transparent Zcash',
|
||
raw: 43,
|
||
name: 'zec',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/zcash.svg',
|
||
decimals: 8);
|
||
static const zen = CryptoCurrency(
|
||
title: 'ZEN',
|
||
fullName: 'Horizen',
|
||
raw: 44,
|
||
name: 'zen',
|
||
iconPath: 'assets/images/zen_icon.png',
|
||
decimals: 8);
|
||
static const xvg = CryptoCurrency(
|
||
title: 'XVG',
|
||
fullName: 'Verge',
|
||
raw: 45,
|
||
name: 'xvg',
|
||
iconPath: 'assets/images/xvg_icon.png',
|
||
decimals: 8);
|
||
|
||
static const usdcpoly = CryptoCurrency(
|
||
title: 'USDC',
|
||
tag: 'POL',
|
||
fullName: 'USDC',
|
||
raw: 46,
|
||
name: 'usdcpoly',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
|
||
decimals: 6,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const dcr = CryptoCurrency(
|
||
title: 'DCR',
|
||
fullName: 'Decred',
|
||
raw: 47,
|
||
name: 'dcr',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/decred.svg',
|
||
decimals: 8,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/decred.svg");
|
||
static const kmd = CryptoCurrency(
|
||
title: 'KMD',
|
||
fullName: 'Komodo',
|
||
raw: 48,
|
||
name: 'kmd',
|
||
iconPath: 'assets/images/kmd_icon.png',
|
||
decimals: 8);
|
||
static const mana = CryptoCurrency(
|
||
title: 'MANA',
|
||
tag: 'ETH',
|
||
fullName: 'Decentraland',
|
||
raw: 49,
|
||
name: 'mana',
|
||
iconPath: 'assets/images/mana_icon.png',
|
||
decimals: 18);
|
||
static const maticpoly = CryptoCurrency(
|
||
title: 'POL',
|
||
tag: 'POL',
|
||
fullName: 'Polygon',
|
||
raw: 50,
|
||
name: 'maticpoly',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/polygon.svg',
|
||
decimals: 18,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/polygon.svg",
|
||
chainIconPath: "assets/new-ui/chain_badges/polygon.svg");
|
||
static const matic = CryptoCurrency(
|
||
title: 'MATIC',
|
||
tag: 'ETH',
|
||
fullName: 'Polygon',
|
||
raw: 51,
|
||
name: 'matic',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/polygon.svg',
|
||
decimals: 18,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/polygon.svg");
|
||
static const mkr = CryptoCurrency(
|
||
title: 'MKR',
|
||
tag: 'ETH',
|
||
fullName: 'Maker',
|
||
raw: 52,
|
||
name: 'mkr',
|
||
iconPath: 'assets/images/mkr_icon.png',
|
||
decimals: 18);
|
||
static const near = CryptoCurrency(
|
||
title: 'NEAR',
|
||
fullName: 'NEAR Protocol',
|
||
raw: 53,
|
||
name: 'near',
|
||
iconPath: 'assets/images/near_icon.png',
|
||
decimals: 24);
|
||
static const oxt = CryptoCurrency(
|
||
title: 'OXT',
|
||
tag: 'ETH',
|
||
fullName: 'Orchid',
|
||
raw: 54,
|
||
name: 'oxt',
|
||
iconPath: 'assets/images/oxt_icon.png',
|
||
decimals: 18);
|
||
static const paxg = CryptoCurrency(
|
||
title: 'PAXG',
|
||
tag: 'ETH',
|
||
fullName: 'Pax Gold',
|
||
raw: 55,
|
||
name: 'paxg',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/paxg.svg',
|
||
decimals: 18);
|
||
static const pivx = CryptoCurrency(
|
||
title: 'PIVX', raw: 56, name: 'pivx', iconPath: 'assets/images/pivx_icon.png', decimals: 8);
|
||
static const rune = CryptoCurrency(
|
||
title: 'RUNE',
|
||
fullName: 'Thorchain',
|
||
raw: 57,
|
||
name: 'rune',
|
||
iconPath: 'assets/images/rune_icon.png',
|
||
decimals: 18);
|
||
static const rvn = CryptoCurrency(
|
||
title: 'RVN',
|
||
fullName: 'Ravencoin',
|
||
raw: 58,
|
||
name: 'rvn',
|
||
iconPath: 'assets/images/rvn_icon.png',
|
||
decimals: 8);
|
||
static const scrt = CryptoCurrency(
|
||
title: 'SCRT',
|
||
fullName: 'Secret Network',
|
||
raw: 59,
|
||
name: 'scrt',
|
||
iconPath: 'assets/images/scrt_icon.png',
|
||
decimals: 6);
|
||
static const uni = CryptoCurrency(
|
||
title: 'UNI',
|
||
tag: 'ETH',
|
||
fullName: 'Uniswap',
|
||
raw: 60,
|
||
name: 'uni',
|
||
iconPath: 'assets/images/uni_icon.png',
|
||
decimals: 18);
|
||
static const stx = CryptoCurrency(
|
||
title: 'STX',
|
||
fullName: 'Stacks',
|
||
raw: 61,
|
||
name: 'stx',
|
||
iconPath: 'assets/images/stx_icon.png',
|
||
decimals: 8);
|
||
static const btcln = CryptoCurrency(
|
||
title: 'BTC',
|
||
tag: 'LN',
|
||
fullName: 'Bitcoin Lightning Network',
|
||
raw: 62,
|
||
name: 'btcln',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/lightning.svg',
|
||
chainIconPath: "assets/new-ui/chain_badges/lightning.svg",
|
||
decimals: 8);
|
||
static const shib = CryptoCurrency(
|
||
title: 'SHIB',
|
||
tag: 'ETH',
|
||
fullName: 'Shiba Inu',
|
||
raw: 63,
|
||
name: 'shib',
|
||
iconPath: 'assets/images/shib_icon.png',
|
||
decimals: 18);
|
||
static const aave = CryptoCurrency(
|
||
title: 'AAVE',
|
||
tag: 'ETH',
|
||
fullName: 'Aave',
|
||
raw: 64,
|
||
name: 'aave',
|
||
iconPath: 'assets/images/aave_icon.png',
|
||
decimals: 18);
|
||
static const arb = CryptoCurrency(
|
||
title: 'ARB',
|
||
fullName: 'Arbitrum',
|
||
raw: 65,
|
||
name: 'arb',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/arbitrum.svg',
|
||
decimals: 18,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/arbitrum.svg",
|
||
chainIconPath: "assets/new-ui/chain_badges/arbitrum.svg");
|
||
static const bat = CryptoCurrency(
|
||
title: 'BAT',
|
||
tag: 'ETH',
|
||
fullName: 'Basic Attention Token',
|
||
raw: 66,
|
||
name: 'bat',
|
||
iconPath: 'assets/images/bat_icon.png',
|
||
decimals: 18);
|
||
static const comp = CryptoCurrency(
|
||
title: 'COMP',
|
||
tag: 'ETH',
|
||
fullName: 'Compound',
|
||
raw: 67,
|
||
name: 'comp',
|
||
iconPath: 'assets/images/comp_icon.png',
|
||
decimals: 18);
|
||
static const cro = CryptoCurrency(
|
||
title: 'CRO',
|
||
tag: 'ETH',
|
||
fullName: 'Crypto.com Cronos',
|
||
raw: 68,
|
||
name: 'cro',
|
||
iconPath: 'assets/images/cro_icon.png',
|
||
decimals: 8);
|
||
static const ens = CryptoCurrency(
|
||
title: 'ENS',
|
||
tag: 'ETH',
|
||
fullName: 'Ethereum Name Service',
|
||
raw: 69,
|
||
name: 'ens',
|
||
iconPath: 'assets/images/ens_icon.png',
|
||
decimals: 18);
|
||
static const ftm = CryptoCurrency(
|
||
title: 'FTM',
|
||
tag: 'ETH',
|
||
fullName: 'Fantom',
|
||
raw: 70,
|
||
name: 'ftm',
|
||
iconPath: 'assets/images/ftm_icon.png',
|
||
decimals: 18);
|
||
static const frax = CryptoCurrency(
|
||
title: 'FRAX',
|
||
tag: 'ETH',
|
||
fullName: 'Frax',
|
||
raw: 71,
|
||
name: 'frax',
|
||
iconPath: 'assets/images/frax_icon.png',
|
||
decimals: 18);
|
||
static const gusd = CryptoCurrency(
|
||
title: 'GUSD',
|
||
tag: 'ETH',
|
||
fullName: 'Gemini USD',
|
||
raw: 72,
|
||
name: 'gusd',
|
||
iconPath: 'assets/images/gusd_icon.png',
|
||
decimals: 2);
|
||
static const gtc = CryptoCurrency(
|
||
title: 'GTC',
|
||
tag: 'ETH',
|
||
fullName: 'Gitcoin',
|
||
raw: 73,
|
||
name: 'gtc',
|
||
iconPath: 'assets/images/gtc_icon.png',
|
||
decimals: 18);
|
||
static const grt = CryptoCurrency(
|
||
title: 'GRT',
|
||
tag: 'ETH',
|
||
fullName: 'The Graph',
|
||
raw: 74,
|
||
name: 'grt',
|
||
iconPath: 'assets/images/grt_icon.png',
|
||
decimals: 18);
|
||
static const ldo = CryptoCurrency(
|
||
title: 'LDO',
|
||
tag: 'ETH',
|
||
fullName: 'Lido DAO',
|
||
raw: 75,
|
||
name: 'ldo',
|
||
iconPath: 'assets/images/ldo_icon.png',
|
||
decimals: 18);
|
||
static const nexo = CryptoCurrency(
|
||
title: 'NEXO',
|
||
tag: 'ETH',
|
||
fullName: 'Nexo',
|
||
raw: 76,
|
||
name: 'nexo',
|
||
iconPath: 'assets/images/nexo_icon.png',
|
||
decimals: 18);
|
||
static const cake = CryptoCurrency(
|
||
title: 'CAKE',
|
||
tag: 'BSC',
|
||
fullName: 'PancakeSwap',
|
||
raw: 77,
|
||
name: 'cake',
|
||
iconPath: 'assets/images/cake_icon.png',
|
||
decimals: 18);
|
||
static const pepe = CryptoCurrency(
|
||
title: 'PEPE',
|
||
tag: 'ETH',
|
||
fullName: 'Pepe',
|
||
raw: 78,
|
||
name: 'pepe',
|
||
iconPath: 'assets/images/pepe_icon.png',
|
||
decimals: 18);
|
||
static const storj = CryptoCurrency(
|
||
title: 'STORJ',
|
||
tag: 'ETH',
|
||
fullName: 'Storj',
|
||
raw: 79,
|
||
name: 'storj',
|
||
iconPath: 'assets/images/storj_icon.png',
|
||
decimals: 8);
|
||
static const tusd = CryptoCurrency(
|
||
title: 'TUSD',
|
||
tag: 'ETH',
|
||
fullName: 'TrueUSD',
|
||
raw: 80,
|
||
name: 'tusd',
|
||
iconPath: 'assets/images/tusd_icon.png',
|
||
decimals: 18);
|
||
static const wbtc = CryptoCurrency(
|
||
title: 'WBTC',
|
||
tag: 'ETH',
|
||
fullName: 'Wrapped Bitcoin',
|
||
raw: 81,
|
||
name: 'wbtc',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/wbtc.svg',
|
||
decimals: 8);
|
||
static const weth = CryptoCurrency(
|
||
title: 'WETH',
|
||
tag: 'ETH',
|
||
fullName: 'Wrapped Ethereum',
|
||
raw: 82,
|
||
name: 'weth',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg',
|
||
decimals: 18);
|
||
static const zrx = CryptoCurrency(
|
||
title: 'ZRX',
|
||
tag: 'ETH',
|
||
fullName: '0x Protocol',
|
||
raw: 83,
|
||
name: 'zrx',
|
||
iconPath: 'assets/images/zrx_icon.png',
|
||
decimals: 18);
|
||
static const dydx = CryptoCurrency(
|
||
title: 'DYDX',
|
||
tag: 'ETH',
|
||
fullName: 'dYdX',
|
||
raw: 84,
|
||
name: 'dydx',
|
||
iconPath: 'assets/images/dydx_icon.png',
|
||
decimals: 18);
|
||
static const steth = CryptoCurrency(
|
||
title: 'STETH',
|
||
tag: 'ETH',
|
||
fullName: 'Lido Staked Ethereum',
|
||
raw: 85,
|
||
name: 'steth',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg',
|
||
decimals: 18);
|
||
static const banano = CryptoCurrency(
|
||
title: 'BAN',
|
||
fullName: 'Banano',
|
||
raw: 86,
|
||
name: 'banano',
|
||
iconPath: 'assets/images/nano_icon.png',
|
||
decimals: 29,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/nano.svg");
|
||
static const usdtPoly = CryptoCurrency(
|
||
title: 'USDT',
|
||
tag: 'POL',
|
||
fullName: 'Tether (PoS)',
|
||
raw: 87,
|
||
name: 'usdtpoly',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
|
||
decimals: 6,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const usdcEPoly = CryptoCurrency(
|
||
title: 'USDC.E',
|
||
tag: 'POL',
|
||
fullName: 'USDC (PoS)',
|
||
raw: 88,
|
||
name: 'usdcepoly',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
|
||
decimals: 6);
|
||
static const kaspa = CryptoCurrency(
|
||
title: 'KAS',
|
||
fullName: 'Kaspa',
|
||
raw: 89,
|
||
name: 'kas',
|
||
iconPath: 'assets/images/kaspa_icon.png',
|
||
decimals: 8);
|
||
static const digibyte = CryptoCurrency(
|
||
title: 'DGB',
|
||
fullName: 'DigiByte',
|
||
raw: 90,
|
||
name: 'dgb',
|
||
iconPath: 'assets/images/digibyte.png',
|
||
decimals: 8);
|
||
static const usdtSol = CryptoCurrency(
|
||
title: 'USDT',
|
||
tag: 'SOL',
|
||
fullName: 'Tether',
|
||
raw: 91,
|
||
name: 'usdtsol',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
|
||
decimals: 6,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const usdcTrc20 = CryptoCurrency(
|
||
title: 'USDC',
|
||
tag: 'TRX',
|
||
fullName: 'USDC Coin',
|
||
raw: 92,
|
||
name: 'usdctrc20',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
|
||
decimals: 6,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const tbtc = CryptoCurrency(
|
||
title: 'tBTC',
|
||
fullName: 'Testnet Bitcoin',
|
||
raw: 93,
|
||
name: 'tbtc',
|
||
iconPath: 'assets/images/tbtc.png',
|
||
decimals: 8);
|
||
static const wow = CryptoCurrency(
|
||
title: 'WOW',
|
||
fullName: 'Wownero',
|
||
raw: 94,
|
||
name: 'wow',
|
||
iconPath: 'assets/images/crypto/wownero.svg',
|
||
decimals: 11);
|
||
static const ton = CryptoCurrency(
|
||
title: 'TON',
|
||
fullName: 'Toncoin',
|
||
raw: 95,
|
||
name: 'ton',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/ton.svg',
|
||
decimals: 8);
|
||
static const zano = CryptoCurrency(
|
||
title: 'ZANO',
|
||
tag: 'ZANO',
|
||
fullName: 'Zano',
|
||
raw: 96,
|
||
name: 'zano',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/zano.svg',
|
||
decimals: 12,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/zano.svg",
|
||
chainIconPath: "assets/new-ui/chain_badges/zano.svg");
|
||
static const flip = CryptoCurrency(
|
||
title: 'FLIP',
|
||
tag: 'ETH',
|
||
fullName: 'Chainflip',
|
||
raw: 97,
|
||
name: 'flip',
|
||
iconPath: 'assets/images/flip_icon.png',
|
||
decimals: 18);
|
||
static const deuro = CryptoCurrency(
|
||
title: 'DEURO',
|
||
tag: 'ETH',
|
||
fullName: 'Decentralized Euro',
|
||
raw: 98,
|
||
name: 'deuro',
|
||
iconPath: 'assets/images/deuro_icon.png',
|
||
decimals: 18,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const usdtbsc = CryptoCurrency(
|
||
title: 'USDT',
|
||
tag: 'BSC',
|
||
fullName: 'USDT Binance coin',
|
||
raw: 99,
|
||
name: 'usdtbsc',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
|
||
decimals: 18,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const ndeps = CryptoCurrency(
|
||
title: 'NDEPS',
|
||
tag: 'ETH',
|
||
fullName: 'Native Decentralized Euro Protocol Share',
|
||
raw: 100,
|
||
name: 'ndeps',
|
||
iconPath: 'assets/images/ndeps_icon.png',
|
||
decimals: 18);
|
||
static const deps = CryptoCurrency(
|
||
title: 'DEPS',
|
||
tag: 'ETH',
|
||
fullName: 'Decentralized Euro Protocol Share',
|
||
raw: 101,
|
||
name: 'deps',
|
||
iconPath: 'assets/images/deps_icon.png',
|
||
decimals: 18);
|
||
static const kbtc = CryptoCurrency(
|
||
title: 'KBTC',
|
||
tag: 'ETH',
|
||
fullName: 'Kraken Wrapped Bitcoin',
|
||
raw: 102,
|
||
name: 'kbtc',
|
||
iconPath: 'assets/images/kbtc_icon.png',
|
||
decimals: 8);
|
||
static const cbbtc = CryptoCurrency(
|
||
title: 'CBBTC',
|
||
tag: 'ETH',
|
||
fullName: 'Coinbase Wrapped BTC',
|
||
raw: 103,
|
||
name: 'cbbtc',
|
||
iconPath: 'assets/images/cbbtc_icon.png',
|
||
decimals: 8);
|
||
static const baseEth = CryptoCurrency(
|
||
title: 'ETH',
|
||
tag: 'BASE',
|
||
fullName: 'Ethereum',
|
||
raw: 104,
|
||
name: 'baseth',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg',
|
||
decimals: 18,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/base.svg",
|
||
chainIconPath: "assets/new-ui/chain_badges/base.svg");
|
||
static const usde = CryptoCurrency(
|
||
title: 'USDE',
|
||
tag: 'BASE',
|
||
fullName: 'Ethena USDE',
|
||
raw: 105,
|
||
name: 'usde',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usde.svg',
|
||
decimals: 18);
|
||
static const arbEth = CryptoCurrency(
|
||
title: 'ETH',
|
||
tag: 'ARB',
|
||
fullName: 'Ethereum',
|
||
raw: 106,
|
||
name: 'arbeth',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/ethereum.svg',
|
||
decimals: 18,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/arbitrum.svg",
|
||
chainIconPath: "assets/new-ui/chain_badges/arbitrum.svg");
|
||
static const zec = CryptoCurrency(
|
||
title: 'ZEC',
|
||
fullName: 'Zcash',
|
||
raw: 107,
|
||
name: 'zec',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/zcash.svg',
|
||
decimals: 8,
|
||
flatIconPath: "assets/new-ui/balance_card_icons/zcash.svg");
|
||
static const usdcArb = CryptoCurrency(
|
||
title: 'USDC',
|
||
tag: 'ARB',
|
||
fullName: 'USDC Coin',
|
||
raw: 108,
|
||
name: 'usdcarb',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg',
|
||
decimals: 6,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const usdtArb = CryptoCurrency(
|
||
title: 'USDT',
|
||
tag: 'ARB',
|
||
fullName: 'USDT Tether',
|
||
raw: 109,
|
||
name: 'usdtarb',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg',
|
||
decimals: 6,
|
||
groups: const {CurrencyGroups.stablecoin});
|
||
static const ltcmweb = CryptoCurrency(
|
||
title: 'LTC',
|
||
fullName: 'Litecoin MWeb',
|
||
raw: 110,
|
||
name: 'ltcmweb',
|
||
iconPath: 'assets/new-ui/crypto_full_icons/litecoin.svg',
|
||
decimals: 8);
|
||
|
||
static final Map<int, CryptoCurrency> _rawCurrencyMap = [
|
||
...all,
|
||
...havenCurrencies,
|
||
...zcashCurrencies
|
||
].fold<Map<int, CryptoCurrency>>(<int, CryptoCurrency>{}, (acc, item) {
|
||
acc.addAll({item.raw: item});
|
||
return acc;
|
||
});
|
||
|
||
static final Map<String, CryptoCurrency> _nameCurrencyMap = [
|
||
...all,
|
||
...havenCurrencies,
|
||
...zcashCurrencies
|
||
].fold<Map<String, CryptoCurrency>>(<String, CryptoCurrency>{}, (acc, item) {
|
||
acc.addAll({item.name: item});
|
||
return acc;
|
||
});
|
||
|
||
static final Map<String, CryptoCurrency> _fullNameCurrencyMap = [
|
||
...all,
|
||
...havenCurrencies,
|
||
...zcashCurrencies
|
||
].fold<Map<String, CryptoCurrency>>(<String, CryptoCurrency>{}, (acc, item) {
|
||
if (item.fullName != null) {
|
||
acc.addAll({item.fullName!.toLowerCase(): item});
|
||
}
|
||
return acc;
|
||
});
|
||
|
||
// Scheme to currency mapping for URI scheme
|
||
static final Map<String, CryptoCurrency> _schemeCurrencyMap = {
|
||
'bitcoin': btc,
|
||
'bitcoincash': bch,
|
||
'polygon': maticpoly,
|
||
'solana': sol,
|
||
'nano-gpt': nano,
|
||
'secret': scrt,
|
||
'stellar': xlm,
|
||
'avalanche': avaxc,
|
||
'binance': bnb,
|
||
'tether': usdt,
|
||
'usdcoin': usdc,
|
||
'wrappedbitcoin': wbtc,
|
||
'wrappedether': weth,
|
||
'shibainu': shib,
|
||
'zcash': zec,
|
||
'lightning': btcln,
|
||
'base': baseEth,
|
||
'arbitrum': arbEth,
|
||
'bsc': bnb,
|
||
};
|
||
|
||
static CryptoCurrency deserialize({required int raw}) {
|
||
if (CryptoCurrency._rawCurrencyMap[raw] == null) {
|
||
final s = 'Unexpected token: $raw for CryptoCurrency deserialize';
|
||
throw ArgumentError.value(raw, 'raw', s);
|
||
}
|
||
return CryptoCurrency._rawCurrencyMap[raw]!;
|
||
}
|
||
|
||
static CryptoCurrency? safeDeserialize({int? raw}) {
|
||
if (raw == null || raw < 0) return null;
|
||
return _rawCurrencyMap[raw];
|
||
}
|
||
|
||
// TODO: refactor this
|
||
static CryptoCurrency fromString(String name, {CryptoCurrency? walletCurrency}) {
|
||
final schemeMatch = _schemeCurrencyMap[name.toLowerCase()];
|
||
if (schemeMatch != null) return schemeMatch;
|
||
|
||
try {
|
||
return CryptoCurrency.all.firstWhere((element) =>
|
||
element.title.toLowerCase() == name.toLowerCase() &&
|
||
(element.tag == null ||
|
||
element.tag == name ||
|
||
element.tag == walletCurrency?.title ||
|
||
element.tag == walletCurrency?.tag));
|
||
} catch (_) {}
|
||
|
||
// search by fullName if not found by title:
|
||
try {
|
||
return CryptoCurrency.all.firstWhere((element) => element.fullName?.toLowerCase() == name);
|
||
} catch (_) {}
|
||
|
||
if (CryptoCurrency._nameCurrencyMap[name.toLowerCase()] == null) {
|
||
final s = 'Unexpected token: $name for CryptoCurrency fromString';
|
||
throw ArgumentError.value(name, 'name', s);
|
||
}
|
||
|
||
return CryptoCurrency._nameCurrencyMap[name.toLowerCase()]!;
|
||
}
|
||
|
||
static CryptoCurrency fromFullName(String name) {
|
||
if (CryptoCurrency._fullNameCurrencyMap[name.split("(").first.trim().toLowerCase()] == null) {
|
||
final s = 'Unexpected token: $name for CryptoCurrency fromFullName';
|
||
throw ArgumentError.value(name, 'Fullname', s);
|
||
}
|
||
return CryptoCurrency._fullNameCurrencyMap[name.split("(").first.trim().toLowerCase()]!;
|
||
}
|
||
|
||
static CryptoCurrency? safeParseCurrencyFromString(
|
||
String? raw, {
|
||
String? tag,
|
||
CryptoCurrency? walletCurrency,
|
||
}) {
|
||
if (raw == null || raw.isEmpty) return null;
|
||
|
||
if (tag?.toLowerCase() == "lightning") tag = "LN";
|
||
|
||
if (tag != null && tag.isNotEmpty) {
|
||
final match = CryptoCurrency.all.firstWhereOrNull(
|
||
(e) =>
|
||
e.title.toUpperCase() == raw.toUpperCase() &&
|
||
e.tag?.toUpperCase() == tag?.toUpperCase(),
|
||
);
|
||
if (match != null) return match;
|
||
return null;
|
||
}
|
||
|
||
// Try for native currency with same title and tag
|
||
if (tag == null || tag.isEmpty) {
|
||
final match = CryptoCurrency.all.firstWhereOrNull(
|
||
(e) => e.title.toUpperCase() == raw.toUpperCase() && (e.tag == raw.toUpperCase()),
|
||
);
|
||
|
||
if (match != null) return match;
|
||
}
|
||
|
||
try {
|
||
return CryptoCurrency.fromString(raw, walletCurrency: walletCurrency);
|
||
} catch (_) {}
|
||
|
||
// try cleaned (keep only A–Z/0–9)
|
||
final cleaned = raw.trim().toUpperCase().replaceAll(RegExp(r'[^A-Z0-9]'), '');
|
||
try {
|
||
return CryptoCurrency.fromString(cleaned, walletCurrency: walletCurrency);
|
||
} catch (_) {}
|
||
|
||
return null;
|
||
}
|
||
|
||
CryptoCurrency copyWith({
|
||
String? title,
|
||
int? raw,
|
||
String? name,
|
||
String? fullName,
|
||
String? iconPath,
|
||
String? tag,
|
||
int? decimals,
|
||
bool? enabled,
|
||
bool? isPotentialScam,
|
||
Set<String>? groups,
|
||
}) =>
|
||
CryptoCurrency(
|
||
title: title ?? this.title,
|
||
raw: raw ?? this.raw,
|
||
name: name ?? this.name,
|
||
fullName: fullName ?? this.fullName,
|
||
iconPath: iconPath ?? this.iconPath,
|
||
tag: tag ?? this.tag,
|
||
decimals: decimals ?? this.decimals,
|
||
enabled: enabled ?? this.enabled,
|
||
isPotentialScam: isPotentialScam ?? this.isPotentialScam,
|
||
groups: groups ?? this.groups,
|
||
);
|
||
|
||
@override
|
||
String toString() => title;
|
||
|
||
bool titleAndTagEqual(CryptoCurrency other) => title == other.title && tag == other.tag;
|
||
|
||
@override
|
||
Money parseAmount(String value) => Money.parse(value, this);
|
||
|
||
@override
|
||
Money? tryParseAmount(String value) => Money.tryParse(value, this);
|
||
|
||
/// Format the raw amount into its decimal representation eg. turn Sats into Bitcoin
|
||
String formatAmount(BigInt amount, {int? fractionalDigits, bool trimZeros = true}) =>
|
||
formatFixed(amount, decimals, fractionalDigits: fractionalDigits, trimZeros: trimZeros);
|
||
}
|