Skip to content

Commit ab3a64d

Browse files
committed
Fiat implementation
1 parent 2d3bcb6 commit ab3a64d

File tree

13 files changed

+194
-84
lines changed

13 files changed

+194
-84
lines changed

lib/main.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ import 'package:sentinelx/models/dojo.dart';
1212
import 'package:sentinelx/models/wallet.dart';
1313
import 'package:sentinelx/screens/Lock/lock_screen.dart';
1414
import 'package:sentinelx/screens/home.dart';
15-
import 'package:sentinelx/screens/settings.dart';
15+
import 'package:sentinelx/screens/settings/settings.dart';
1616
import 'package:sentinelx/screens/splash_screen.dart';
1717
import 'package:sentinelx/shared_state/app_state.dart';
1818
import 'package:sentinelx/shared_state/loaderState.dart';
1919
import 'package:sentinelx/shared_state/network_state.dart';
20+
import 'package:sentinelx/shared_state/rate_state.dart';
2021
import 'package:sentinelx/shared_state/sentinel_state.dart';
2122
import 'package:sentinelx/shared_state/theme_provider.dart';
2223
import 'package:sentinelx/shared_state/tx_state.dart';
@@ -38,6 +39,7 @@ Future main() async {
3839
providers: [
3940
Provider<AppState>.value(value: AppState()),
4041
ChangeNotifierProvider<NetworkState>.value(value: NetworkState()),
42+
ChangeNotifierProvider<RateState>.value(value: RateState()),
4143
ChangeNotifierProvider<ThemeProvider>.value(value: AppState().theme),
4244
ChangeNotifierProvider<Wallet>.value(value: AppState().selectedWallet),
4345
ChangeNotifierProvider<TxState>.value(
@@ -86,6 +88,8 @@ class _AppWrapperState extends State<AppWrapper> with WidgetsBindingObserver {
8688
void dispose() {
8789
PrefsStore().dispose();
8890
SentinelxDB.instance.closeConnection();
91+
RateState().save();
92+
RateState().dispose();
8993
AppState().dispose();
9094
WidgetsBinding.instance.removeObserver(this);
9195
super.dispose();

lib/models/db/prefs_store.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ class PrefsStore {
1515
static const THEME_ACCENT = "THEME_ACCENT";
1616
static const CURRENCY = "CURRENCY";
1717
static const CURRENCY_RATE = "CURRENCY_RATE";
18+
static const CURRENCY_RATE_PERIOD = "CURRENCY_RATE_PERIOD";
19+
static const AMOUNT_VIEW_TYPE = "AMOUNT_VIEW_TYPE";
1820
static const DOJO = "DOJO";
1921

2022

lib/models/exchange/LocalBitcoinRateProvider.dart

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,14 @@ class LocalBitcoinRateProvider implements ExchangeProvider {
186186

187187
@override
188188
String getSelectedPeriod() {
189-
return this.ratePeriods.firstWhere((item) {
190-
return item["key"] == _selectedPeriod;
191-
})['title'];
189+
try {
190+
return this.ratePeriods.firstWhere((item) {
191+
return item["key"] == _selectedPeriod;
192+
})['title'];
193+
} catch (e) {
194+
print(e);
195+
this.ratePeriods.last;
196+
}
192197
return null;
193198
}
194199
}

lib/models/exchange/exchange_provider.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
import 'package:flutter/cupertino.dart';
12
import 'package:sentinelx/models/exchange/rate.dart';
23

3-
class ExchangeProvider {
4+
abstract class ExchangeProvider {
45
String payload;
56
String currency = "USD";
7+
String _selectedPeriod = "";
8+
final List<String> availableCurrencies = [];
9+
List<Map<String, String>> ratePeriods = [];
610

711
ExchangeProvider(this.payload);
812

@@ -17,5 +21,8 @@ class ExchangeProvider {
1721
setCurrency(String currency) {
1822
this.currency = currency;
1923
}
20-
}
2124

25+
String getSelectedPeriod() {
26+
//no-op
27+
}
28+
}

lib/screens/home.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ import 'package:sentinelx/channels/system_channel.dart';
99
import 'package:sentinelx/models/tx.dart';
1010
import 'package:sentinelx/screens/Receive/receive_screen.dart';
1111
import 'package:sentinelx/screens/dojo_configure.dart';
12-
import 'package:sentinelx/screens/settings.dart';
12+
import 'package:sentinelx/screens/settings/settings.dart';
1313
import 'package:sentinelx/screens/tx_details.dart';
1414
import 'package:sentinelx/screens/watch_list.dart';
1515
import 'package:sentinelx/shared_state/app_state.dart';
1616
import 'package:sentinelx/shared_state/loaderState.dart';
1717
import 'package:sentinelx/shared_state/network_state.dart';
18+
import 'package:sentinelx/shared_state/rate_state.dart';
1819
import 'package:sentinelx/shared_state/tx_state.dart';
1920
import 'package:sentinelx/utils/utils.dart';
2021
import 'package:sentinelx/widgets/account_pager.dart';
@@ -258,6 +259,7 @@ class _HomeState extends State<Home> {
258259
print(e);
259260
}
260261
}
262+
RateState().getExchangeRates();
261263
// await refreshUnspent();
262264
return;
263265
}
@@ -311,7 +313,7 @@ class _HomeState extends State<Home> {
311313
await SystemChannel().setNetwork(false);
312314
}
313315
} else {
314-
AppState().isTestnet = await SystemChannel().isTestNet();
316+
AppState().isTestNet = await SystemChannel().isTestNet();
315317
}
316318
}
317319

lib/screens/settings/currency_settings.dart

Lines changed: 80 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import 'package:flutter/cupertino.dart';
22
import 'package:flutter/material.dart';
33
import 'package:provider/provider.dart';
44
import 'package:sentinelx/models/db/prefs_store.dart';
5+
import 'package:sentinelx/models/exchange/LocalBitcoinRateProvider.dart';
56
import 'package:sentinelx/models/exchange/currencies.dart';
7+
import 'package:sentinelx/models/exchange/exchange_provider.dart';
8+
import 'package:sentinelx/models/exchange/rate.dart';
69
import 'package:sentinelx/shared_state/rate_state.dart';
710

811
class CurrencySettings extends StatefulWidget {
@@ -13,15 +16,17 @@ class CurrencySettings extends StatefulWidget {
1316
class _CurrencySettingsState extends State<CurrencySettings> {
1417
bool loading = false;
1518
String selectedCurrency;
19+
String selectedPeriod;
1620

1721
@override
1822
Widget build(BuildContext context) {
19-
selectedCurrency = RateState().provider.currency;
23+
selectedCurrency = RateState().provider.currency;
24+
selectedPeriod = RateState().provider.getSelectedPeriod();
2025

2126
return Scaffold(
2227
appBar: AppBar(
2328
title: Text("Currency settings"),
24-
bottom: UnderProgress(loading),
29+
bottom: AppBarUnderProgress(loading),
2530
),
2631
backgroundColor: Theme.of(context).backgroundColor,
2732
body: ListView(
@@ -38,6 +43,11 @@ class _CurrencySettingsState extends State<CurrencySettings> {
3843
subtitle: Text("$selectedCurrency"),
3944
onTap: showCurrencyChooser,
4045
),
46+
ListTile(
47+
title: Text("Rate period"),
48+
subtitle: Text(RateState().provider.getSelectedPeriod() == null ? "Default" : RateState().provider.getSelectedPeriod()),
49+
onTap: showRatePeriodChooser,
50+
),
4151
Divider(),
4252
],
4353
),
@@ -49,18 +59,25 @@ class _CurrencySettingsState extends State<CurrencySettings> {
4959
context: context,
5060
builder: (context) {
5161
return Card(
52-
margin: const EdgeInsets.all(8.0),
62+
margin: const EdgeInsets.all(8.0),
5363
child: Consumer<RateState>(
5464
builder: (context, rateState, _) {
5565
return Container(
5666
height: double.infinity,
5767
child: ListView.separated(
58-
separatorBuilder: (b, c) => Divider(height: 1,),
68+
separatorBuilder: (b, c) => Divider(
69+
height: 1,
70+
),
5971
itemBuilder: (BuildContext context, int i) {
6072
String curr = rateState.provider.availableCurrencies[i];
6173
return ListTile(
6274
title: Text(curr),
63-
trailing: selectedCurrency == curr ? Icon(Icons.check,color: Colors.greenAccent,): SizedBox.shrink(),
75+
trailing: selectedCurrency == curr
76+
? Icon(
77+
Icons.check,
78+
color: Colors.greenAccent,
79+
)
80+
: SizedBox.shrink(),
6481
onTap: () {
6582
this.setCurrency(rateState.provider.availableCurrencies[i]);
6683
},
@@ -75,6 +92,45 @@ class _CurrencySettingsState extends State<CurrencySettings> {
7592
});
7693
}
7794

95+
void showRatePeriodChooser() {
96+
ExchangeProvider provider = RateState().provider;
97+
showModalBottomSheet(
98+
context: context,
99+
builder: (context) {
100+
return Card(
101+
margin: const EdgeInsets.all(8.0),
102+
child: Consumer<RateState>(
103+
builder: (context, rateState, _) {
104+
return Wrap(
105+
children: provider.ratePeriods.map((period) {
106+
return Wrap(
107+
children: <Widget>[
108+
ListTile(
109+
title: Text(period["title"]),
110+
trailing: Radio(
111+
value: period['title'],
112+
groupValue: selectedPeriod,
113+
onChanged: (va) {
114+
this.setPeriod(period);
115+
},
116+
),
117+
onTap: () {
118+
this.setPeriod(period);
119+
},
120+
),
121+
Divider(
122+
height: 1,
123+
)
124+
],
125+
);
126+
}).toList(),
127+
);
128+
},
129+
),
130+
);
131+
});
132+
}
133+
78134
void setCurrency(String currency) async {
79135
PrefsStore().put(PrefsStore.CURRENCY, currency);
80136
setState(() {
@@ -88,12 +144,12 @@ class _CurrencySettingsState extends State<CurrencySettings> {
88144
});
89145
}
90146

91-
showProvider () {
147+
showProvider() {
92148
List<String> providers = ["LocalBitcoins"];
93149
String radioGroup = "LocalBitcoins";
94150
showModalBottomSheet(
95151
context: context,
96-
builder: (context){
152+
builder: (context) {
97153
return Padding(
98154
padding: const EdgeInsets.all(8.0),
99155
child: Card(
@@ -103,27 +159,40 @@ class _CurrencySettingsState extends State<CurrencySettings> {
103159
return ListTile(
104160
dense: true,
105161
onTap: () {
106-
// onSelect(timeout);
162+
//TODO
107163
},
108164
title: Text('$provider'),
109165
trailing: Radio(
110166
value: provider,
111167
groupValue: radioGroup,
112-
onChanged: (va){},
168+
onChanged: (va) {},
113169
),
114170
);
115171
}).toList(),
116172
),
117173
),
118174
);
175+
});
176+
}
177+
178+
void setPeriod(Map<String, String> period) async {
179+
setState(() {
180+
loading = true;
181+
selectedPeriod = period['title'];
182+
});
183+
PrefsStore().put(PrefsStore.CURRENCY_RATE_PERIOD, period['key']);
184+
Navigator.pop(context);
185+
await RateState().getExchangeRates();
186+
setState(() {
187+
loading = false;
119188
});
120189
}
121190
}
122191

123-
class UnderProgress extends StatelessWidget implements PreferredSizeWidget {
192+
class AppBarUnderProgress extends StatelessWidget implements PreferredSizeWidget {
124193
final bool loading;
125194

126-
UnderProgress(this.loading);
195+
AppBarUnderProgress(this.loading);
127196

128197
@override
129198
Widget build(BuildContext context) {

0 commit comments

Comments
 (0)