Enable different currencies (#401)

This commit is contained in:
Omar Hatem 2022-07-01 13:04:00 +02:00 committed by GitHub
parent 3bd9301be1
commit 8321c9fbbe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 90 additions and 54 deletions

View file

@ -8,6 +8,9 @@ class FiatCurrency extends EnumerableItem<String> with Serializable<String> {
static List<FiatCurrency> get all => _all.values.toList(); static List<FiatCurrency> get all => _all.values.toList();
static List<FiatCurrency> get currenciesAvailableToBuyWith =>
[aud, brl, cad, chf, czk, eur, dkk, gbp, hkd, ils, jpy, krw, mxn, myr, nok, nzd, pln, sek, sgd, thb, usd, zar];
static const aud = FiatCurrency(symbol: 'AUD', countryCode: "aus", fullName: "Australian Dollar"); static const aud = FiatCurrency(symbol: 'AUD', countryCode: "aus", fullName: "Australian Dollar");
static const bgn = FiatCurrency(symbol: 'BGN', countryCode: "bgr", fullName: "Bulgarian Lev"); static const bgn = FiatCurrency(symbol: 'BGN', countryCode: "bgr", fullName: "Bulgarian Lev");
static const brl = FiatCurrency(symbol: 'BRL', countryCode: "bra", fullName: "Brazilian Real"); static const brl = FiatCurrency(symbol: 'BRL', countryCode: "bra", fullName: "Brazilian Real");

View file

@ -2,6 +2,8 @@ import 'dart:ui';
import 'package:cake_wallet/buy/buy_amount.dart'; import 'package:cake_wallet/buy/buy_amount.dart';
import 'package:cake_wallet/buy/buy_provider.dart'; import 'package:cake_wallet/buy/buy_provider.dart';
import 'package:cake_wallet/buy/moonpay/moonpay_buy_provider.dart'; import 'package:cake_wallet/buy/moonpay/moonpay_buy_provider.dart';
import 'package:cake_wallet/entities/fiat_currency.dart';
import 'package:cake_wallet/src/widgets/picker.dart';
import 'package:cw_core/wallet_type.dart'; import 'package:cw_core/wallet_type.dart';
import 'package:cake_wallet/src/screens/buy/widgets/buy_list_item.dart'; import 'package:cake_wallet/src/screens/buy/widgets/buy_list_item.dart';
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart'; import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
@ -27,7 +29,6 @@ class PreOrderPage extends BasePage {
PreOrderPage({@required this.buyViewModel}) PreOrderPage({@required this.buyViewModel})
: _amountFocus = FocusNode(), : _amountFocus = FocusNode(),
_amountController = TextEditingController() { _amountController = TextEditingController() {
_amountController.addListener(() { _amountController.addListener(() {
final amount = _amountController.text; final amount = _amountController.text;
@ -118,44 +119,62 @@ class PreOrderPage extends BasePage {
child: BaseTextFormField( child: BaseTextFormField(
focusNode: _amountFocus, focusNode: _amountFocus,
controller: _amountController, controller: _amountController,
keyboardType: keyboardType: TextInputType.numberWithOptions(signed: false, decimal: true),
TextInputType.numberWithOptions( inputFormatters: [FilteringTextInputFormatter.allow(RegExp(_amountPattern))],
signed: false, decimal: true), prefixIcon: GestureDetector(
inputFormatters: [ onTap: () {
FilteringTextInputFormatter showPopUp<void>(
.allow(RegExp(_amountPattern)) context: context,
], builder: (_) => Picker(
prefixIcon: Padding( hintText: S.current.search_currency,
items: FiatCurrency.currenciesAvailableToBuyWith,
selectedAtIndex:
FiatCurrency.currenciesAvailableToBuyWith.indexOf(buyViewModel.fiatCurrency),
onItemSelected: (FiatCurrency selectedCurrency) {
buyViewModel.buyAmountViewModel.fiatCurrency = selectedCurrency;
},
images: FiatCurrency.currenciesAvailableToBuyWith
.map((e) => Image.asset("assets/images/flags/${e.countryCode}.png"))
.toList(),
isGridView: true,
matchingCriteria: (FiatCurrency currency, String searchText) {
return currency.title.toLowerCase().contains(searchText) ||
currency.fullName.toLowerCase().contains(searchText);
},
),
);
},
child: Padding(
padding: EdgeInsets.only(top: 2), padding: EdgeInsets.only(top: 2),
child: child: Row(
Text(buyViewModel.fiatCurrency.title + ': ', mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.keyboard_arrow_down, color: Colors.white),
Text(
buyViewModel.fiatCurrency.title + ': ',
style: TextStyle( style: TextStyle(
fontSize: 36, fontSize: 36,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: Colors.white, color: Colors.white,
)), ),
),
],
),
),
), ),
hintText: '0.00', hintText: '0.00',
borderColor: Theme.of(context) borderColor: Theme.of(context).primaryTextTheme.body2.decorationColor,
.primaryTextTheme
.body2
.decorationColor,
borderWidth: 0.5, borderWidth: 0.5,
textStyle: TextStyle( textStyle: TextStyle(fontSize: 36, fontWeight: FontWeight.w500, color: Colors.white),
fontSize: 36,
fontWeight: FontWeight.w500,
color: Colors.white),
placeholderTextStyle: TextStyle( placeholderTextStyle: TextStyle(
color: Theme.of(context) color: Theme.of(context).primaryTextTheme.headline.decorationColor,
.primaryTextTheme
.headline
.decorationColor,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontSize: 36), fontSize: 36,
) ),
) ),
) ),
) ),
),
), ),
if (buyViewModel.isShowProviderButtons) Padding( if (buyViewModel.isShowProviderButtons) Padding(
padding: EdgeInsets.only(top: 38, bottom: 18), padding: EdgeInsets.only(top: 38, bottom: 18),

View file

@ -1,3 +1,5 @@
import 'package:cake_wallet/di.dart';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:mobx/mobx.dart'; import 'package:mobx/mobx.dart';
import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/entities/fiat_currency.dart';
@ -6,12 +8,24 @@ part 'buy_amount_view_model.g.dart';
class BuyAmountViewModel = BuyAmountViewModelBase with _$BuyAmountViewModel; class BuyAmountViewModel = BuyAmountViewModelBase with _$BuyAmountViewModel;
abstract class BuyAmountViewModelBase with Store { abstract class BuyAmountViewModelBase with Store {
BuyAmountViewModelBase() : amount = ''; BuyAmountViewModelBase() {
amount = '';
int selectedIndex = FiatCurrency.currenciesAvailableToBuyWith
.indexOf(getIt.get<SettingsStore>().fiatCurrency);
if (selectedIndex == -1) {
selectedIndex = FiatCurrency.currenciesAvailableToBuyWith
.indexOf(FiatCurrency.usd);
}
fiatCurrency = FiatCurrency.currenciesAvailableToBuyWith[selectedIndex];
}
@observable @observable
String amount; String amount;
FiatCurrency get fiatCurrency => FiatCurrency.usd; @observable
FiatCurrency fiatCurrency;
@computed @computed
double get doubleAmount { double get doubleAmount {

View file

@ -54,6 +54,7 @@ abstract class BuyViewModelBase with Store {
double get doubleAmount => buyAmountViewModel.doubleAmount; double get doubleAmount => buyAmountViewModel.doubleAmount;
@computed
FiatCurrency get fiatCurrency => buyAmountViewModel.fiatCurrency; FiatCurrency get fiatCurrency => buyAmountViewModel.fiatCurrency;
CryptoCurrency get cryptoCurrency => walletTypeToCryptoCurrency(type); CryptoCurrency get cryptoCurrency => walletTypeToCryptoCurrency(type);

View file

@ -1,4 +1,3 @@
import 'package:cake_wallet/di.dart';
import 'package:cake_wallet/entities/language_service.dart'; import 'package:cake_wallet/entities/language_service.dart';
import 'package:cake_wallet/store/yat/yat_store.dart'; import 'package:cake_wallet/store/yat/yat_store.dart';
import 'package:cake_wallet/view_model/settings/choices_list_item.dart'; import 'package:cake_wallet/view_model/settings/choices_list_item.dart';
@ -172,9 +171,9 @@ abstract class SettingsViewModelBase with Store {
displayItem: (dynamic code) { displayItem: (dynamic code) {
return LanguageService.list[code]; return LanguageService.list[code];
}, },
selectedItem: () => getIt.get<SettingsStore>().languageCode, selectedItem: () => _settingsStore.languageCode,
onItemSelected: (String code) { onItemSelected: (String code) {
getIt.get<SettingsStore>().languageCode = code; _settingsStore.languageCode = code;
}, },
images: LanguageService.list.keys.map( images: LanguageService.list.keys.map(
(e) => Image.asset("assets/images/flags/${LanguageService.localeCountryCode[e]}.png")) (e) => Image.asset("assets/images/flags/${LanguageService.localeCountryCode[e]}.png"))