Merge branch 'CW-282-add-trocador-exchange' of https://github.com/cake-tech/cake_wallet into CW-317-change-fiat-api

 Conflicts:
	lib/src/screens/settings/privacy_page.dart
This commit is contained in:
OmarHatem
2023-03-02 18:58:23 +02:00
27 changed files with 685 additions and 188 deletions
@@ -9,7 +9,8 @@ class TradeRow extends StatelessWidget {
required this.to,
required this.createdAtFormattedDate,
this.onTap,
this.formattedAmount,});
this.formattedAmount,
});
final VoidCallback? onTap;
final ExchangeProviderDescription provider;
@@ -35,47 +36,40 @@ class TradeRow extends StatelessWidget {
SizedBox(width: 12),
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text('${from.toString()} → ${to.toString()}',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!
)),
formattedAmount != null
? Text(formattedAmount! + ' ' + amountCrypto,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!
))
: Container()
]),
SizedBox(height: 5),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
if (createdAtFormattedDate != null)
Text(createdAtFormattedDate!,
style: TextStyle(
fontSize: 14,
color: Theme.of(context).textTheme!
.overline!.backgroundColor!))
])
],
)
)
mainAxisSize: MainAxisSize.min,
children: [
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[
Text('${from.toString()} → ${to.toString()}',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
color: Theme.of(context).accentTextTheme!.headline2!.backgroundColor!)),
formattedAmount != null
? Text(formattedAmount! + ' ' + amountCrypto,
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
color:
Theme.of(context).accentTextTheme!.headline2!.backgroundColor!))
: Container()
]),
SizedBox(height: 5),
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[
if (createdAtFormattedDate != null)
Text(createdAtFormattedDate!,
style: TextStyle(
fontSize: 14,
color: Theme.of(context).textTheme!.overline!.backgroundColor!))
])
],
))
],
),
));
}
Image? _getPoweredImage(ExchangeProviderDescription provider) {
Image? image;
Widget? _getPoweredImage(ExchangeProviderDescription provider) {
Widget? image;
switch (provider) {
case ExchangeProviderDescription.xmrto:
@@ -93,10 +87,15 @@ class TradeRow extends StatelessWidget {
case ExchangeProviderDescription.simpleSwap:
image = Image.asset('assets/images/simpleSwap.png', width: 36, height: 36);
break;
case ExchangeProviderDescription.trocador:
image = ClipRRect(
borderRadius: BorderRadius.circular(50),
child: Image.asset('assets/images/trocador.png', width: 36, height: 36));
break;
default:
image = null;
}
return image;
}
}
}
@@ -1,7 +1,11 @@
import 'package:cake_wallet/entities/exchange_api_mode.dart';
import 'package:cake_wallet/entities/fiat_api_mode.dart';
import 'package:cake_wallet/src/screens/nodes/widgets/node_form.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart';
import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart';
import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart';
import 'package:cake_wallet/view_model/settings/choices_list_item.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:flutter/material.dart';
import 'package:cake_wallet/generated/i18n.dart';
@@ -48,29 +52,51 @@ class _AdvancedPrivacySettingsBodyState extends State<AdvancedPrivacySettingsBod
content: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
...widget.privacySettingsViewModel.settings.map(
(item) => Observer(
builder: (_) => SettingsSwitcherCell(
title: item.title,
value: item.value(),
onValueChange: item.onValueChange,
),
),
Observer(
builder: (_) {
return SettingsSwitcherCell(
title: S.current.disable_fiat,
value: widget.privacySettingsViewModel.fiatApi == FiatApiMode.disabled,
onValueChange: (BuildContext context, bool value) {
widget.privacySettingsViewModel.setFiatMode(value);
});
}
),
Observer(
builder: (_) {
if (widget.privacySettingsViewModel.addCustomNode) {
return Padding(
padding: EdgeInsets.only(left: 24, right: 24, top: 24),
child: NodeForm(
formKey: _formKey,
nodeViewModel: widget.nodeViewModel,
),
);
}
return const SizedBox();
},
return SettingsChoicesCell(
ChoicesListItem<ExchangeApiMode>(
title: S.current.exchange,
items: ExchangeApiMode.all,
selectedItem: widget.privacySettingsViewModel.exchangeStatus,
onItemSelected: (ExchangeApiMode mode) =>
widget.privacySettingsViewModel.setExchangeApiMode(mode),
),
);
}
),
Observer(
builder: (_) {
return Column(
children: [
SettingsSwitcherCell(
title: S.current.add_custom_node,
value: widget.privacySettingsViewModel.addCustomNode,
onValueChange: (_, __) => widget.privacySettingsViewModel.toggleAddCustomNode(),
),
if (widget.privacySettingsViewModel.addCustomNode)
Padding(
padding: EdgeInsets.only(left: 24, right: 24, top: 24),
child: NodeForm(
formKey: _formKey,
nodeViewModel: widget.nodeViewModel,
),
)
],
);
}
),
],
),
bottomSectionPadding: EdgeInsets.all(24),
+9 -6
View File
@@ -1,3 +1,4 @@
import 'package:cake_wallet/entities/exchange_api_mode.dart';
import 'package:cake_wallet/entities/fiat_api_mode.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
@@ -33,12 +34,14 @@ class PrivacyPage extends BasePage {
_privacySettingsViewModel.setFiatMode(fiatApiMode),
),
),
SettingsSwitcherCell(
title: S.current.disable_exchange,
value: _privacySettingsViewModel.disableExchange,
onValueChange: (BuildContext context, bool value) {
_privacySettingsViewModel.setEnableExchange(value);
}),
SettingsChoicesCell(
ChoicesListItem<ExchangeApiMode>(
title: S.current.exchange,
items: ExchangeApiMode.all,
selectedItem: _privacySettingsViewModel.exchangeStatus,
onItemSelected: (ExchangeApiMode mode) => _privacySettingsViewModel.setExchangeApiMode(mode),
),
),
SettingsSwitcherCell(
title: S.current.settings_save_recipient_address,
value: _privacySettingsViewModel.shouldSaveRecipientAddress,
+8 -8
View File
@@ -38,7 +38,7 @@ class CheckBoxPickerState extends State<CheckBoxPicker> {
Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
if (widget.title?.isNotEmpty ?? false)
if (widget.title.isNotEmpty)
Container(
padding: EdgeInsets.symmetric(horizontal: 24),
child: Text(
@@ -58,7 +58,7 @@ class CheckBoxPickerState extends State<CheckBoxPicker> {
child: ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(30)),
child: Container(
color: Theme.of(context).accentTextTheme!.headline6!.color!,
color: Theme.of(context).accentTextTheme.headline6!.color!,
child: ConstrainedBox(
constraints: BoxConstraints(
maxHeight: MediaQuery.of(context).size.height * 0.65,
@@ -70,7 +70,7 @@ class CheckBoxPickerState extends State<CheckBoxPicker> {
child: Stack(
alignment: Alignment.center,
children: <Widget>[
(items?.length ?? 0) > 3
(items.length) > 3
? Scrollbar(
controller: controller,
child: itemsList(),
@@ -95,14 +95,14 @@ class CheckBoxPickerState extends State<CheckBoxPicker> {
Widget itemsList() {
return Container(
color: Theme.of(context).accentTextTheme!.headline6!.backgroundColor!,
color: Theme.of(context).accentTextTheme.headline6!.backgroundColor!,
child: ListView.separated(
padding: EdgeInsets.zero,
controller: controller,
shrinkWrap: true,
separatorBuilder: (context, index) => widget.isSeparated
? Divider(
color: Theme.of(context).accentTextTheme!.headline6!.backgroundColor!,
color: Theme.of(context).accentTextTheme.headline6!.backgroundColor!,
height: 1,
)
: const SizedBox(),
@@ -121,13 +121,13 @@ class CheckBoxPickerState extends State<CheckBoxPicker> {
},
child: Container(
height: 55,
color: Theme.of(context).accentTextTheme!.headline6!.color!,
color: Theme.of(context).accentTextTheme.headline6!.color!,
padding: EdgeInsets.only(left: 24, right: 24),
child: CheckboxListTile(
value: item.value,
activeColor: item.value
? Palette.blueCraiola
: Theme.of(context).accentTextTheme!.subtitle1!.decorationColor!,
: Theme.of(context).accentTextTheme.subtitle1!.decorationColor!,
checkColor: Colors.white,
title: widget.displayItem?.call(item) ??
Text(
@@ -138,7 +138,7 @@ class CheckBoxPickerState extends State<CheckBoxPicker> {
fontWeight: FontWeight.w600,
color: item.isDisabled
? Colors.grey.withOpacity(0.5)
: Theme.of(context).primaryTextTheme!.headline6!.color!,
: Theme.of(context).primaryTextTheme.headline6!.color!,
decoration: TextDecoration.none,
),
),