@@ -2,7 +2,10 @@ import 'package:flutter/cupertino.dart';
22import 'package:flutter/material.dart' ;
33import 'package:provider/provider.dart' ;
44import 'package:sentinelx/models/db/prefs_store.dart' ;
5+ import 'package:sentinelx/models/exchange/LocalBitcoinRateProvider.dart' ;
56import 'package:sentinelx/models/exchange/currencies.dart' ;
7+ import 'package:sentinelx/models/exchange/exchange_provider.dart' ;
8+ import 'package:sentinelx/models/exchange/rate.dart' ;
69import 'package:sentinelx/shared_state/rate_state.dart' ;
710
811class CurrencySettings extends StatefulWidget {
@@ -13,15 +16,17 @@ class CurrencySettings extends StatefulWidget {
1316class _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