diff --git a/webapp/frontend/lib/common/model.dart b/webapp/frontend/lib/common/model.dart index e5d637a72..0edb15598 100644 --- a/webapp/frontend/lib/common/model.dart +++ b/webapp/frontend/lib/common/model.dart @@ -1,4 +1,5 @@ import 'package:decimal/decimal.dart'; +import 'package:decimal/intl.dart'; import 'package:get_10101/common/amount_text.dart'; import 'package:intl/intl.dart'; @@ -151,11 +152,11 @@ class Price implements Formattable { try { final f = NumberFormat("#,###"); - int amount = + double amount = // remove any comma and dot from text formatting the users input. - int.parse(value.replaceAll(f.symbols.GROUP_SEP, '')); + double.parse(value.replaceAll(f.symbols.GROUP_SEP, '')); - _usd = Decimal.fromInt(amount); + _usd = Decimal.parse(value); } on Exception { _usd = Decimal.zero; } @@ -163,8 +164,8 @@ class Price implements Formattable { @override String formatted() { - final formatter = NumberFormat("#,###,###,###,###", "en"); - return formatter.format(_usd); + final formatter = NumberFormat("#,##0.00", "en_US"); + return formatter.format(DecimalIntl(_usd)); } @override diff --git a/webapp/frontend/lib/trade/trade_screen.dart b/webapp/frontend/lib/trade/trade_screen.dart index 7b6e18be9..5cad3a1c3 100644 --- a/webapp/frontend/lib/trade/trade_screen.dart +++ b/webapp/frontend/lib/trade/trade_screen.dart @@ -9,7 +9,7 @@ class TradeScreen extends StatefulWidget { static const route = "/trade"; // TODO: get price from service - final Quote quote = Quote(Price(41129.0), Price(41129.5)); + final Quote quote = Quote(Price(41129.0), Price(41130.5)); // for now just to avoid division by 0 errors, later we should introduce a maintenance margin final double maintenanceMargin = 0.001; @@ -28,6 +28,7 @@ class _TradeScreenState extends State { final TextEditingController _marginController = TextEditingController(); final TextEditingController _liquidationPriceController = TextEditingController(); + final TextEditingController _latestPriceController = TextEditingController(); @override void initState() { @@ -87,6 +88,17 @@ class _TradeScreenState extends State { ], ), const SizedBox(height: 20), + Align( + alignment: AlignmentDirectional.centerEnd, + child: AmountInputField( + enabled: false, + label: isLong ? "Ask" : "Bid", + textAlign: TextAlign.right, + suffixIcon: const Icon(FontAwesomeIcons.dollarSign), + controller: _latestPriceController, + ), + ), + const SizedBox(height: 20), Align( alignment: AlignmentDirectional.centerEnd, child: AmountInputField( @@ -151,6 +163,12 @@ class _TradeScreenState extends State { _quantity!, _quote!, _leverage, widget.maintenanceMargin, isLong) .formatted(); } + + if (isLong && _quote != null && _quote!.ask != null) { + _latestPriceController.text = _quote!.ask!.formatted(); + } else if (!isLong && _quote != null && _quote!.bid != null) { + _latestPriceController.text = _quote!.bid!.formatted(); + } } }