This commit is contained in:
M
2020-09-28 18:47:43 +03:00
parent 51cf11127c
commit e3678d2cf9
32 changed files with 482 additions and 904 deletions
-98
View File
@@ -1,98 +0,0 @@
// import 'dart:async';
// import 'package:flutter/foundation.dart';
// import 'package:mobx/mobx.dart';
// import 'package:cake_wallet/entities/node.dart';
// import 'package:cake_wallet/entities/sync_status.dart';
// import 'package:cake_wallet/src/domain/services/wallet_service.dart';
// import 'package:cake_wallet/src/start_updating_price.dart';
// import 'package:cake_wallet/src/stores/sync/sync_store.dart';
// import 'package:cake_wallet/src/stores/wallet/wallet_store.dart';
// import 'package:cake_wallet/src/stores/settings/settings_store.dart';
// import 'package:cake_wallet/src/stores/price/price_store.dart';
// import 'package:cake_wallet/src/stores/authentication/authentication_store.dart';
// import 'package:cake_wallet/src/stores/login/login_store.dart';
//
// Timer _reconnectionTimer;
// ReactionDisposer _connectToNodeDisposer;
// ReactionDisposer _onSyncStatusChangeDisposer;
// ReactionDisposer _onCurrentWalletChangeDisposer;
//
// void setReactions(
// {@required SettingsStore settingsStore,
// @required PriceStore priceStore,
// @required SyncStore syncStore,
// @required WalletStore walletStore,
// @required WalletService walletService,
// // @required AuthenticationStore authenticationStore,
// @required LoginStore loginStore}) {
// connectToNode(settingsStore: settingsStore, walletStore: walletStore);
// onSyncStatusChange(
// syncStore: syncStore,
// walletStore: walletStore,
// settingsStore: settingsStore);
// onCurrentWalletChange(
// walletStore: walletStore,
// settingsStore: settingsStore,
// priceStore: priceStore);
// autorun((_) async {
// // if (authenticationStore.state == AuthenticationState.allowed) {
// // await loginStore.loadCurrentWallet();
// // authenticationStore.state = AuthenticationState.readyToLogin;
// // }
// });
// }
//
// void connectToNode({SettingsStore settingsStore, WalletStore walletStore}) {
// _connectToNodeDisposer?.call();
//
// _connectToNodeDisposer = reaction((_) => settingsStore.node,
// (Node node) async => await walletStore.connectToNode(node: node));
// }
//
// void onCurrentWalletChange(
// {WalletStore walletStore,
// SettingsStore settingsStore,
// PriceStore priceStore}) {
// _onCurrentWalletChangeDisposer?.call();
//
// reaction((_) => walletStore.name, (String _) {
// walletStore.connectToNode(node: settingsStore.node);
// startUpdatingPrice(settingsStore: settingsStore, priceStore: priceStore);
// });
// }
//
// void onSyncStatusChange(
// {SyncStore syncStore,
// WalletStore walletStore,
// SettingsStore settingsStore}) {
// // _onSyncStatusChangeDisposer?.call();
//
// // reaction((_) => syncStore.status, (SyncStatus status) async {
// // if (status is ConnectedSyncStatus) {
// // await walletStore.startSync();
// // }
//
// // // Reconnect to the node if the app is not started sync after 30 seconds
// // if (status is StartingSyncStatus) {
// // startReconnectionObserver(syncStore: syncStore, walletStore: walletStore);
// // }
// // });
// }
//
// void startReconnectionObserver({SyncStore syncStore, WalletStore walletStore}) {
// if (_reconnectionTimer != null) {
// _reconnectionTimer.cancel();
// }
//
// _reconnectionTimer = Timer.periodic(Duration(minutes: 1), (_) async {
// try {
// final isConnected = await walletStore.isConnected();
//
// if (!isConnected) {
// await walletStore.reconnect();
// }
// } catch (e) {
// print(e);
// }
// });
// }
+20 -24
View File
@@ -1,14 +1,22 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:cake_wallet/src/widgets/nav_bar.dart';
import 'package:provider/provider.dart';
import 'package:cake_wallet/themes.dart';
import 'package:cake_wallet/theme_changer.dart';
import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/di.dart';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/src/widgets/nav_bar.dart';
enum AppBarStyle { regular, withShadow, transparent }
abstract class BasePage extends StatelessWidget {
BasePage()
: _scaffoldKey = GlobalKey<ScaffoldState>(),
_closeButtonImage = Image.asset('assets/images/close_button.png'),
_closeButtonImageDarkTheme =
Image.asset('assets/images/close_button_dark_theme.png');
final GlobalKey<ScaffoldState> _scaffoldKey;
final Image _closeButtonImage;
final Image _closeButtonImageDarkTheme;
String get title => null;
bool get isModalBackButton => false;
@@ -29,11 +37,7 @@ abstract class BasePage extends StatelessWidget {
Widget Function(BuildContext, Widget) get rootWrapper => null;
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
final _closeButtonImage = Image.asset('assets/images/close_button.png');
final _closeButtonImageDarkTheme =
Image.asset('assets/images/close_button_dark_theme.png');
bool get _isDarkTheme => getIt.get<SettingsStore>().isDarkTheme;
void onOpenEndDrawer() => _scaffoldKey.currentState.openEndDrawer();
@@ -45,12 +49,9 @@ abstract class BasePage extends StatelessWidget {
}
final _backButton = Image.asset('assets/images/back_arrow.png',
color: titleColor ?? Theme.of(context).primaryTextTheme.title.color);
final _themeChanger = Provider.of<ThemeChanger>(context);
final _closeButton = _themeChanger.getTheme() == Themes.darkTheme
? _closeButtonImageDarkTheme
: _closeButtonImage;
color: titleColor ?? Theme.of(context).primaryTextTheme.title.color);
final _closeButton =
_isDarkTheme ? _closeButtonImageDarkTheme : _closeButtonImage;
return SizedBox(
height: 37,
@@ -77,7 +78,7 @@ abstract class BasePage extends StatelessWidget {
fontWeight: FontWeight.bold,
fontFamily: 'Poppins',
color: titleColor ??
Theme.of(context).primaryTextTheme.title.color),
Theme.of(context).primaryTextTheme.title.color),
);
}
@@ -86,10 +87,8 @@ abstract class BasePage extends StatelessWidget {
Widget floatingActionButton(BuildContext context) => null;
ObstructingPreferredSizeWidget appBar(BuildContext context) {
final _themeChanger = Provider.of<ThemeChanger>(context);
final _isDarkTheme = _themeChanger.getTheme() == Themes.darkTheme;
final appBarColor = _isDarkTheme
? backgroundDarkColor : backgroundLightColor;
final appBarColor =
_isDarkTheme ? backgroundDarkColor : backgroundLightColor;
switch (appBarStyle) {
case AppBarStyle.regular:
@@ -131,9 +130,6 @@ abstract class BasePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final _themeChanger = Provider.of<ThemeChanger>(context);
final _isDarkTheme = _themeChanger.getTheme() == Themes.darkTheme;
final root = Scaffold(
key: _scaffoldKey,
backgroundColor:
@@ -142,7 +138,7 @@ abstract class BasePage extends StatelessWidget {
extendBodyBehindAppBar: extendBodyBehindAppBar,
endDrawer: endDrawer,
appBar: appBar(context),
body: body(context), //SafeArea(child: ),
body: body(context),
floatingActionButton: floatingActionButton(context));
return rootWrapper?.call(context, root) ?? root;
@@ -164,10 +164,10 @@ class ContactListPage extends BasePage {
final isDelete =
await showAlertDialog(context) ?? false;
// if (isDelete) {
// await contactListViewModel
// .delete(contact);
// }
if (isDelete) {
await contactListViewModel
.delete(contact);
}
},
),
],
@@ -1,33 +0,0 @@
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:provider/provider.dart';
import 'package:cake_wallet/exchange/trade.dart';
// import 'package:cake_wallet/monero/transaction_description.dart';
// import 'package:cake_wallet/src/domain/services/wallet_service.dart';
// import 'package:cake_wallet/src/screens/dashboard/dashboard_page.dart';
// import 'package:cake_wallet/src/stores/action_list/action_list_store.dart';
// import 'package:cake_wallet/src/stores/action_list/trade_filter_store.dart';
// import 'package:cake_wallet/src/stores/action_list/transaction_filter_store.dart';
// import 'package:cake_wallet/src/stores/price/price_store.dart';
// import 'package:cake_wallet/src/stores/settings/settings_store.dart';
// import 'package:cake_wallet/src/stores/wallet/wallet_store.dart';
// FIXME: Remove me.
// Widget createDashboardPage(
// {@required WalletService walletService,
// @required PriceStore priceStore,
// @required Box<TransactionDescription> transactionDescriptions,
// @required SettingsStore settingsStore,
// @required Box<Trade> trades,
// @required WalletStore walletStore}) =>
// Provider(
// create: (_) => ActionListStore(
// walletService: walletService,
// settingsStore: settingsStore,
// priceStore: priceStore,
// tradesSource: trades,
// transactionFilterStore: TransactionFilterStore(),
// tradeFilterStore: TradeFilterStore(walletStore: walletStore),
// transactionDescriptions: transactionDescriptions),
// child: DashboardPage());
@@ -105,7 +105,7 @@ class DashboardPage extends BasePage {
Container(
padding: EdgeInsets.only(left: 45, right: 45, bottom: 24),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
ActionButton(
image: sendImage,
@@ -11,44 +11,41 @@ class BalancePage extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.all(24),
child: Center(
child: Container(
height: 160,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Observer(builder: (_) {
return Text(
dashboardViewModel.balanceViewModel.currency.toString(),
style: TextStyle(
fontSize: 40,
fontWeight: FontWeight.bold,
color: Theme.of(context).indicatorColor,
height: 1),
);
}),
Observer(builder: (_) {
return Text(dashboardViewModel.balanceViewModel.cryptoBalance,
style: TextStyle(
fontSize: 54,
fontWeight: FontWeight.bold,
color: Colors.white,
height: 1),
textAlign: TextAlign.center);
}),
Observer(builder: (_) {
return Text(dashboardViewModel.balanceViewModel.fiatBalance,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
color: Theme.of(context).indicatorColor,
height: 1),
textAlign: TextAlign.center);
}),
],
),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Observer(builder: (_) {
return Text(
dashboardViewModel.balanceViewModel.currency.toString(),
style: TextStyle(
fontSize: 40,
fontWeight: FontWeight.bold,
color: Theme.of(context).indicatorColor,
height: 1),
);
}),
SizedBox(height: 10),
Observer(builder: (_) {
return Text(dashboardViewModel.balanceViewModel.cryptoBalance,
style: TextStyle(
fontSize: 54,
fontWeight: FontWeight.bold,
color: Colors.white,
height: 1),
textAlign: TextAlign.center);
}),
SizedBox(height: 10),
Observer(builder: (_) {
return Text(dashboardViewModel.balanceViewModel.fiatBalance,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
color: Theme.of(context).indicatorColor,
height: 1),
textAlign: TextAlign.center);
}),
],
),
);
}
@@ -146,11 +146,11 @@ class ExchangeCardState extends State<ExchangeCard> {
textAlign: TextAlign.left,
keyboardType: TextInputType.numberWithOptions(
signed: false, decimal: true),
inputFormatters: [
LengthLimitingTextInputFormatter(15),
BlacklistingTextInputFormatter(
RegExp('[\\-|\\ |\\,]'))
],
// inputFormatters: [
// LengthLimitingTextInputFormatter(15),
// BlacklistingTextInputFormatter(
// RegExp('[\\-|\\ |\\,]'))
// ],
hintText: '0.0000',
borderColor: widget.borderColor,
textStyle: TextStyle(
+61
View File
@@ -0,0 +1,61 @@
import 'package:flutter/material.dart';
import 'package:cake_wallet/palette.dart';
class FAQItem extends StatefulWidget {
FAQItem(this.title, this.text);
final String title;
final String text;
@override
State<StatefulWidget> createState() => FAQItemState();
}
class FAQItemState extends State<FAQItem> {
bool isActive;
@override
void initState() {
isActive = false;
super.initState();
}
@override
Widget build(BuildContext context) {
final addIcon =
Icon(Icons.add, color: Theme.of(context).primaryTextTheme.title.color);
final removeIcon = Icon(Icons.remove, color: Palette.blueCraiola);
final icon = isActive ? removeIcon : addIcon;
final color = isActive
? Palette.blueCraiola
: Theme.of(context).primaryTextTheme.title.color;
return ListTileTheme(
contentPadding: EdgeInsets.fromLTRB(0, 6, 24, 6),
child: ExpansionTile(
title: Text(widget.title,
style: TextStyle(
fontSize: 14, fontWeight: FontWeight.w500, color: color)),
trailing: icon,
onExpansionChanged: (value) => setState(() => isActive = value),
children: <Widget>[
Row(mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[
Expanded(
child: Container(
padding: EdgeInsets.only(
right: 24.0,
),
child: Text(
widget.text,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.normal,
color: Theme.of(context).primaryTextTheme.title.color),
),
))
])
],
),
);
}
}
+16 -124
View File
@@ -1,46 +1,30 @@
import 'dart:convert';
import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/src/widgets/standard_list.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/src/screens/faq/faq_item.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/widgets/standard_list.dart';
import 'package:cake_wallet/store/settings_store.dart';
class FaqPage extends BasePage {
FaqPage(this.settingsStore);
final SettingsStore settingsStore;
@override
String get title => S.current.faq;
@override
Widget body(BuildContext context) => FaqForm();
}
class FaqForm extends StatefulWidget {
@override
FaqFormState createState() => FaqFormState();
}
class FaqFormState extends State<FaqForm> {
List<Icon> icons;
List<Color> colors;
bool isLoaded = false;
String get path => 'assets/faq/faq_' + settingsStore.languageCode + '.json';
@override
Widget build(BuildContext context) {
final addIcon = Icon(Icons.add, color: Theme.of(context).primaryTextTheme.title.color);
final removeIcon = Icon(Icons.remove, color: Palette.blueCraiola);
Widget body(BuildContext context) {
return Container(
padding: EdgeInsets.only(top: 12, left: 24),
child: FutureBuilder(
builder: (context, snapshot) {
final faqItems = jsonDecode(snapshot.data.toString()) as List;
if (snapshot.hasData) {
setIconsAndColors(context, faqItems.length, addIcon);
}
return SingleChildScrollView(
child: Column(
children: <Widget>[
@@ -49,112 +33,20 @@ class FaqFormState extends State<FaqForm> {
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemBuilder: (BuildContext context, int index) {
final itemTitle = faqItems[index]["question"].toString();
final itemChild = faqItems[index]["answer"].toString();
final title = faqItems[index]["question"].toString();
final text = faqItems[index]["answer"].toString();
return ListTileTheme(
contentPadding: EdgeInsets.fromLTRB(0, 6, 24, 6),
child: ExpansionTile(
title: Text(
itemTitle,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
color: colors[index]
),
),
trailing: icons[index],
onExpansionChanged: (value) {
setState(() {
if (value) {
icons[index] = removeIcon;
colors[index] = Palette.blueCraiola;
} else {
icons[index] = addIcon;
colors[index] = Theme.of(context).primaryTextTheme.title.color;
}
});
},
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
child: Container(
padding: EdgeInsets.only(
right: 24.0,
),
child: Text(
itemChild,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.normal,
color: Theme.of(context).primaryTextTheme.title.color
),
),
))
],
)
],
),
);
return FAQItem(title, text);
},
separatorBuilder: (_, __) =>
StandardListSeparator(),
itemCount: faqItems == null ? 0 : faqItems.length,
separatorBuilder: (_, __) => StandardListSeparator(),
itemCount: faqItems?.length ?? 0,
)
],
),
);
},
future: rootBundle.loadString(getFaqPath(context)),
future: rootBundle.loadString(path),
),
);
}
void setIconsAndColors(BuildContext context, int index, Icon icon) {
if (isLoaded) {
return;
}
icons = List.generate(index, (int i) => icon);
colors = List.generate(index, (int i) => Theme.of(context).primaryTextTheme.title.color);
isLoaded = true;
}
String getFaqPath(BuildContext context) {
// FIXME: FIXME
// final settingsStore = Provider.of<SettingsStore>(context);
//
// switch (settingsStore.languageCode) {
// case 'en':
// return 'assets/faq/faq_en.json';
// case 'uk':
// return 'assets/faq/faq_uk.json';
// case 'ru':
// return 'assets/faq/faq_ru.json';
// case 'es':
// return 'assets/faq/faq_es.json';
// case 'ja':
// return 'assets/faq/faq_ja.json';
// case 'ko':
// return 'assets/faq/faq_ko.json';
// case 'hi':
// return 'assets/faq/faq_hi.json';
// case 'de':
// return 'assets/faq/faq_de.json';
// case 'zh':
// return 'assets/faq/faq_zh.json';
// case 'pt':
// return 'assets/faq/faq_pt.json';
// case 'pl':
// return 'assets/faq/faq_pl.json';
// case 'nl':
// return 'assets/faq/faq_nl.json';
// default:
// return 'assets/faq/faq_en.json';
// }
return '';
}
}
}
+147 -152
View File
@@ -1,4 +1,5 @@
import 'dart:ui';
// import 'package:cake_wallet/src/domain/common/transaction_priority.dart';
import 'package:cake_wallet/core/execution_state.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
@@ -20,6 +21,7 @@ import 'package:dotted_border/dotted_border.dart';
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
import 'package:cake_wallet/src/screens/send/widgets/confirm_sending_alert.dart';
// import 'package:cake_wallet/src/screens/send/widgets/sending_alert.dart';
import 'package:cake_wallet/src/widgets/template_tile.dart';
import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
@@ -70,8 +72,7 @@ class SendPage extends BasePage {
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(24),
bottomRight: Radius.circular(24)
),
bottomRight: Radius.circular(24)),
gradient: LinearGradient(colors: [
Theme.of(context).primaryTextTheme.subhead.color,
Theme.of(context).primaryTextTheme.subhead.decorationColor,
@@ -106,10 +107,14 @@ class SendPage extends BasePage {
AddressTextFieldOption.qrCode,
AddressTextFieldOption.addressBook
],
buttonColor:
Theme.of(context).primaryTextTheme.display1.color,
borderColor:
Theme.of(context).primaryTextTheme.headline.color,
buttonColor: Theme.of(context)
.primaryTextTheme
.display1
.color,
borderColor: Theme.of(context)
.primaryTextTheme
.headline
.color,
textStyle: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
@@ -123,83 +128,76 @@ class SendPage extends BasePage {
.decorationColor),
validator: sendViewModel.addressValidator,
),
Observer(builder: (_) {
return Padding(
padding: const EdgeInsets.only(top: 20),
child: BaseTextFormField(
controller: _cryptoAmountController,
keyboardType: TextInputType.numberWithOptions(
signed: false, decimal: true),
inputFormatters: [
BlacklistingTextInputFormatter(
RegExp('[\\-|\\ |\\,]'))
],
prefixIcon: Padding(
padding: EdgeInsets.only(top: 9),
child:
Text(sendViewModel.currency.title + ':',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
color: Colors.white,
)),
),
suffixIcon: Container(
height: 32,
width: 32,
margin: EdgeInsets.only(
left: 14, top: 4, bottom: 10),
decoration: BoxDecoration(
color: Theme.of(context)
.primaryTextTheme
.display1
.color,
borderRadius: BorderRadius.all(
Radius.circular(6))),
child: InkWell(
onTap: () =>
sendViewModel.setSendAll(),
child: Center(
child: Text(S.of(context).all,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
color: Theme.of(context)
.primaryTextTheme
.display1
.decorationColor)),
),
),
),
hintText: '0.0000',
borderColor: Theme.of(context)
.primaryTextTheme
.headline
.color,
textStyle: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
color: Colors.white),
placeholderTextStyle: TextStyle(
Padding(
padding: const EdgeInsets.only(top: 20),
child: BaseTextFormField(
controller: _cryptoAmountController,
keyboardType: TextInputType.numberWithOptions(
signed: false, decimal: true),
prefixIcon: Padding(
padding: EdgeInsets.only(top: 9),
child:
Text(sendViewModel.currency.title + ':',
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
color: Colors.white,
)),
),
suffixIcon: Container(
height: 32,
width: 32,
margin: EdgeInsets.only(
left: 14, top: 4, bottom: 10),
decoration: BoxDecoration(
color: Theme.of(context)
.primaryTextTheme
.headline
.decorationColor,
fontWeight: FontWeight.w500,
fontSize: 14),
validator: sendViewModel.amountValidator));
}),
.display1
.color,
borderRadius: BorderRadius.all(
Radius.circular(6))),
child: InkWell(
onTap: () => sendViewModel.setSendAll(),
child: Center(
child: Text(S.of(context).all,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.bold,
color: Theme.of(context)
.primaryTextTheme
.display1
.decorationColor)),
),
),
),
hintText: '0.0000',
borderColor: Theme.of(context)
.primaryTextTheme
.headline
.color,
textStyle: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
color: Colors.white),
placeholderTextStyle: TextStyle(
color: Theme.of(context)
.primaryTextTheme
.headline
.decorationColor,
fontWeight: FontWeight.w500,
fontSize: 14),
validator: sendViewModel.amountValidator)),
Observer(
builder: (_) => Padding(
padding: EdgeInsets.only(top: 10),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
child: Text(
padding: EdgeInsets.only(top: 10),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
child: Text(
S.of(context).available_balance + ':',
style: TextStyle(
fontSize: 12,
@@ -209,29 +207,25 @@ class SendPage extends BasePage {
.headline
.decorationColor),
)),
Text(
sendViewModel.balance,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w600,
color: Theme.of(context)
.primaryTextTheme
.headline
.decorationColor),
)
],
),
)),
Text(
sendViewModel.balance,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w600,
color: Theme.of(context)
.primaryTextTheme
.headline
.decorationColor),
)
],
),
)),
Padding(
padding: const EdgeInsets.only(top: 20),
child: BaseTextFormField(
controller: _fiatAmountController,
keyboardType: TextInputType.numberWithOptions(
signed: false, decimal: true),
inputFormatters: [
BlacklistingTextInputFormatter(
RegExp('[\\-|\\ |\\,]'))
],
prefixIcon: Padding(
padding: EdgeInsets.only(top: 9),
child: Text(sendViewModel.fiat.title + ':',
@@ -260,51 +254,51 @@ class SendPage extends BasePage {
)),
Observer(
builder: (_) => GestureDetector(
onTap: () =>
_setTransactionPriority(context),
child: Container(
padding: EdgeInsets.only(top: 24),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(S.of(context).send_estimated_fee,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w500,
//color: Theme.of(context).primaryTextTheme.display2.color,
color: Colors.white)),
Container(
child: Row(
children: <Widget>[
Text(
sendViewModel.estimatedFee
.toString() +
' ' +
sendViewModel
.currency.title,
style: TextStyle(
fontSize: 12,
fontWeight:
FontWeight.w600,
//color: Theme.of(context).primaryTextTheme.display2.color,
color: Colors.white)),
Padding(
padding:
EdgeInsets.only(left: 5),
child: Icon(
Icons.arrow_forward_ios,
size: 12,
color: Colors.white,
),
)
],
),
)
],
),
),
))
onTap: () =>
_setTransactionPriority(context),
child: Container(
padding: EdgeInsets.only(top: 24),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(S.of(context).send_estimated_fee,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w500,
//color: Theme.of(context).primaryTextTheme.display2.color,
color: Colors.white)),
Container(
child: Row(
children: <Widget>[
Text(
sendViewModel.estimatedFee
.toString() +
' ' +
sendViewModel
.currency.title,
style: TextStyle(
fontSize: 12,
fontWeight:
FontWeight.w600,
//color: Theme.of(context).primaryTextTheme.display2.color,
color: Colors.white)),
Padding(
padding:
EdgeInsets.only(left: 5),
child: Icon(
Icons.arrow_forward_ios,
size: 12,
color: Colors.white,
),
)
],
),
)
],
),
),
))
],
),
)
@@ -358,7 +352,7 @@ class SendPage extends BasePage {
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.all(Radius.circular(20)),
BorderRadius.all(Radius.circular(20)),
color: Colors.transparent,
),
child: Text(
@@ -427,13 +421,12 @@ class SendPage extends BasePage {
)
],
),
bottomSectionPadding: EdgeInsets.only(left: 24, right: 24, bottom: 24),
bottomSectionPadding:
EdgeInsets.only(left: 24, right: 24, bottom: 24),
bottomSection: Observer(builder: (_) {
return LoadingPrimaryButton(
onPressed: () {
if (_formKey.currentState.validate()) {
}
if (_formKey.currentState.validate()) {}
},
text: S.of(context).send,
color: Theme.of(context).accentTextTheme.body2.color,
@@ -441,10 +434,9 @@ class SendPage extends BasePage {
isLoading: sendViewModel.state is IsExecutingState ||
sendViewModel.state is TransactionCommitting,
isDisabled:
false // FIXME !(syncStore.status is SyncedSyncStatus),
);
})
),
false // FIXME !(syncStore.status is SyncedSyncStatus),
);
})),
);
}
@@ -514,7 +506,7 @@ class SendPage extends BasePage {
alertTitle: S.of(context).confirm_sending,
amount: S.of(context).send_amount,
amountValue:
sendViewModel.pendingTransaction.amountFormatted,
sendViewModel.pendingTransaction.amountFormatted,
fee: S.of(context).send_fee,
feeValue: sendViewModel.pendingTransaction.feeFormatted,
leftButtonText: S.of(context).ok,
@@ -565,7 +557,10 @@ class SendPage extends BasePage {
onPressed: () =>
Navigator.of(context).pop(),
text: S.of(context).send_got_it,
color: Theme.of(context).accentTextTheme.body2.color,
color: Theme.of(context)
.accentTextTheme
.body2
.color,
textColor: Colors.white))
],
);
+48 -48
View File
@@ -1,67 +1,67 @@
import 'package:cake_wallet/src/screens/settings/widgets/language_row.dart';
import 'package:cake_wallet/src/widgets/standard_list.dart';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:provider/provider.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/entities/language.dart';
import 'package:cake_wallet/entities/language_service.dart';
// import 'package:cake_wallet/src/stores/settings/settings_store.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
// FIXME: FIXME
class LanguageListPage extends BasePage {
LanguageListPage(this.settingsStore);
final SettingsStore settingsStore;
class ChangeLanguage extends BasePage {
@override
String get title => S.current.settings_change_language;
@override
Widget body(BuildContext context) {
// final settingsStore = Provider.of<SettingsStore>(context);
// final currentLanguage = Provider.of<Language>(context);
//
// return Container(
// padding: EdgeInsets.only(top: 10.0),
// child: SectionStandardList(
// sectionCount: 1,
// context: context,
// itemCounter: (int sectionIndex) => languages.values.length,
// itemBuilder: (_, sectionIndex, index) {
// final item = languages.values.elementAt(index);
// final code = languages.keys.elementAt(index);
//
// final isCurrent = settingsStore.languageCode == null
// ? false
// : code == settingsStore.languageCode;
//
// return LanguageRow(
// title: item,
// isSelected: isCurrent,
// handler: (context) async {
// if (!isCurrent) {
// await showPopUp<void>(
// context: context,
// builder: (BuildContext context) {
// return AlertWithTwoActions(
// alertTitle: S.of(context).change_language,
// alertContent: S.of(context).change_language_to(item),
// rightButtonText: S.of(context).change,
// leftButtonText: S.of(context).cancel,
// actionRightButton: () {
// settingsStore.saveLanguageCode(
// languageCode: code);
// currentLanguage.setCurrentLanguage(code);
// Navigator.of(context).pop();
// },
// actionLeftButton: () => Navigator.of(context).pop()
// );
// });
// }
// },
// );
// },
// )
// );
return Container(
padding: EdgeInsets.only(top: 10.0),
child: SectionStandardList(
sectionCount: 1,
context: context,
itemCounter: (int sectionIndex) => LanguageService.list.values.length,
itemBuilder: (_, sectionIndex, index) {
return Observer(builder: (BuildContext context) {
final item = LanguageService.list.values.elementAt(index);
final code = LanguageService.list.keys.elementAt(index);
final isCurrent = code == settingsStore.languageCode ?? false;
return LanguageRow(
title: item,
isSelected: isCurrent,
handler: (context) async {
if (!isCurrent) {
await showPopUp<void>(
context: context,
builder: (BuildContext context) {
return AlertWithTwoActions(
alertTitle: S.of(context).change_language,
alertContent:
S.of(context).change_language_to(item),
rightButtonText: S.of(context).change,
leftButtonText: S.of(context).cancel,
actionRightButton: () {
settingsStore.languageCode = code;
Navigator.of(context).pop();
},
actionLeftButton: () =>
Navigator.of(context).pop());
});
}
},
);
});
},
));
return null;
}
+1 -1
View File
@@ -8,7 +8,7 @@ class AlertCloseButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Positioned(
bottom: 24,
bottom: 60,
child: GestureDetector(
onTap: () => Navigator.of(context).pop(),
child: Container(