mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-03-25 08:39:06 +00:00
Fix ionia loading states (#493)
This commit is contained in:
parent
c50eeee58b
commit
a745319ffa
5 changed files with 47 additions and 5 deletions
|
@ -56,3 +56,11 @@ class IoniaCardSuccess extends IoniaFetchCardState {
|
||||||
|
|
||||||
final IoniaVirtualCard card;
|
final IoniaVirtualCard card;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class IoniaMerchantState {}
|
||||||
|
|
||||||
|
class IoniaLoadingMerchantState extends IoniaMerchantState {}
|
||||||
|
|
||||||
|
class IoniaLoadedMerchantState extends IoniaMerchantState {}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import 'dart:ffi';
|
|
||||||
|
|
||||||
|
import 'package:cake_wallet/ionia/ionia_create_state.dart';
|
||||||
import 'package:cake_wallet/ionia/ionia_gift_card.dart';
|
import 'package:cake_wallet/ionia/ionia_gift_card.dart';
|
||||||
import 'package:cake_wallet/ionia/ionia_merchant.dart';
|
|
||||||
import 'package:cake_wallet/routes.dart';
|
import 'package:cake_wallet/routes.dart';
|
||||||
import 'package:cake_wallet/src/screens/base_page.dart';
|
import 'package:cake_wallet/src/screens/base_page.dart';
|
||||||
import 'package:cake_wallet/src/screens/ionia/widgets/card_item.dart';
|
import 'package:cake_wallet/src/screens/ionia/widgets/card_item.dart';
|
||||||
|
@ -106,6 +105,7 @@ class _IoniaCardTabsState extends State<_IoniaCardTabs> with SingleTickerProvide
|
||||||
_IoniaCardListView(
|
_IoniaCardListView(
|
||||||
emptyText: S.of(context).gift_card_balance_note,
|
emptyText: S.of(context).gift_card_balance_note,
|
||||||
merchList: viewModel.activeMechs,
|
merchList: viewModel.activeMechs,
|
||||||
|
isLoading: viewModel.merchantState is IoniaLoadingMerchantState,
|
||||||
onTap: (giftCard) {
|
onTap: (giftCard) {
|
||||||
Navigator.pushNamed(
|
Navigator.pushNamed(
|
||||||
context,
|
context,
|
||||||
|
@ -116,6 +116,7 @@ class _IoniaCardTabsState extends State<_IoniaCardTabs> with SingleTickerProvide
|
||||||
_IoniaCardListView(
|
_IoniaCardListView(
|
||||||
emptyText: S.of(context).gift_card_redeemed_note,
|
emptyText: S.of(context).gift_card_redeemed_note,
|
||||||
merchList: viewModel.redeemedMerchs,
|
merchList: viewModel.redeemedMerchs,
|
||||||
|
isLoading: viewModel.merchantState is IoniaLoadingMerchantState,
|
||||||
onTap: (giftCard) {
|
onTap: (giftCard) {
|
||||||
Navigator.pushNamed(
|
Navigator.pushNamed(
|
||||||
context,
|
context,
|
||||||
|
@ -139,14 +140,24 @@ class _IoniaCardListView extends StatelessWidget {
|
||||||
@required this.emptyText,
|
@required this.emptyText,
|
||||||
@required this.merchList,
|
@required this.merchList,
|
||||||
@required this.onTap,
|
@required this.onTap,
|
||||||
|
this.isLoading = false,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
final String emptyText;
|
final String emptyText;
|
||||||
final List<IoniaGiftCard> merchList;
|
final List<IoniaGiftCard> merchList;
|
||||||
final void Function(IoniaGiftCard giftCard) onTap;
|
final void Function(IoniaGiftCard giftCard) onTap;
|
||||||
|
final bool isLoading;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
if(isLoading){
|
||||||
|
return Center(
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
backgroundColor: Theme.of(context).accentTextTheme.display3.backgroundColor,
|
||||||
|
valueColor: AlwaysStoppedAnimation<Color>(Theme.of(context).primaryTextTheme.body1.color),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
return merchList.isEmpty
|
return merchList.isEmpty
|
||||||
? Center(
|
? Center(
|
||||||
child: Text(
|
child: Text(
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import 'package:cake_wallet/di.dart';
|
import 'package:cake_wallet/di.dart';
|
||||||
import 'package:cake_wallet/ionia/ionia_category.dart';
|
import 'package:cake_wallet/ionia/ionia_category.dart';
|
||||||
|
import 'package:cake_wallet/ionia/ionia_create_state.dart';
|
||||||
import 'package:cake_wallet/ionia/ionia_merchant.dart';
|
import 'package:cake_wallet/ionia/ionia_merchant.dart';
|
||||||
import 'package:cake_wallet/routes.dart';
|
import 'package:cake_wallet/routes.dart';
|
||||||
import 'package:cake_wallet/src/screens/base_page.dart';
|
import 'package:cake_wallet/src/screens/base_page.dart';
|
||||||
|
@ -208,7 +209,10 @@ class _IoniaManageCardsPageBodyState extends State<IoniaManageCardsPageBody> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Observer(
|
return Observer(
|
||||||
builder: (_) => Stack(children: [
|
builder: (_) {
|
||||||
|
final merchantState = widget.cardsListViewModel.merchantState;
|
||||||
|
if (merchantState is IoniaLoadedMerchantState) {
|
||||||
|
return Stack(children: [
|
||||||
ListView.separated(
|
ListView.separated(
|
||||||
padding: EdgeInsets.only(left: 2, right: 22),
|
padding: EdgeInsets.only(left: 2, right: 22),
|
||||||
controller: _scrollController,
|
controller: _scrollController,
|
||||||
|
@ -241,7 +245,15 @@ class _IoniaManageCardsPageBodyState extends State<IoniaManageCardsPageBody> {
|
||||||
fromTop: widget.cardsListViewModel.scrollOffsetFromTop,
|
fromTop: widget.cardsListViewModel.scrollOffsetFromTop,
|
||||||
)
|
)
|
||||||
: Offstage()
|
: Offstage()
|
||||||
]),
|
]);
|
||||||
|
}
|
||||||
|
return Center(
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
backgroundColor: Theme.of(context).accentTextTheme.display3.backgroundColor,
|
||||||
|
valueColor: AlwaysStoppedAnimation<Color>(Theme.of(context).primaryTextTheme.body1.color),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import 'package:cake_wallet/ionia/ionia_merchant.dart';
|
import 'package:cake_wallet/ionia/ionia_create_state.dart';
|
||||||
import 'package:cake_wallet/ionia/ionia_service.dart';
|
import 'package:cake_wallet/ionia/ionia_service.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
import 'package:cake_wallet/ionia/ionia_gift_card.dart';
|
import 'package:cake_wallet/ionia/ionia_gift_card.dart';
|
||||||
|
@ -23,6 +23,9 @@ abstract class IoniaAccountViewModelBase with Store {
|
||||||
@observable
|
@observable
|
||||||
List<IoniaGiftCard> giftCards;
|
List<IoniaGiftCard> giftCards;
|
||||||
|
|
||||||
|
@observable
|
||||||
|
IoniaMerchantState merchantState;
|
||||||
|
|
||||||
@computed
|
@computed
|
||||||
int get countOfMerch => giftCards.where((giftCard) => !giftCard.isEmpty).length;
|
int get countOfMerch => giftCards.where((giftCard) => !giftCard.isEmpty).length;
|
||||||
|
|
||||||
|
@ -39,6 +42,8 @@ abstract class IoniaAccountViewModelBase with Store {
|
||||||
|
|
||||||
@action
|
@action
|
||||||
Future<void> updateUserGiftCards() async {
|
Future<void> updateUserGiftCards() async {
|
||||||
|
merchantState = IoniaLoadingMerchantState();
|
||||||
giftCards = await ioniaService.getCurrentUserGiftCardSummaries();
|
giftCards = await ioniaService.getCurrentUserGiftCardSummaries();
|
||||||
|
merchantState = IoniaLoadedMerchantState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,9 @@ abstract class IoniaGiftCardsListViewModelBase with Store {
|
||||||
@observable
|
@observable
|
||||||
IoniaFetchCardState cardState;
|
IoniaFetchCardState cardState;
|
||||||
|
|
||||||
|
@observable
|
||||||
|
IoniaMerchantState merchantState;
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
List<IoniaMerchant> ioniaMerchants;
|
List<IoniaMerchant> ioniaMerchants;
|
||||||
|
|
||||||
|
@ -86,10 +89,13 @@ abstract class IoniaGiftCardsListViewModelBase with Store {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getMerchants() {
|
void _getMerchants() {
|
||||||
|
merchantState = IoniaLoadingMerchantState();
|
||||||
ioniaService.getMerchantsByFilter(categories: selectedFilters).then((value) {
|
ioniaService.getMerchantsByFilter(categories: selectedFilters).then((value) {
|
||||||
value.sort((a, b) => a.legalName.toLowerCase().compareTo(b.legalName.toLowerCase()));
|
value.sort((a, b) => a.legalName.toLowerCase().compareTo(b.legalName.toLowerCase()));
|
||||||
ioniaMerchants = ioniaMerchantList = value;
|
ioniaMerchants = ioniaMerchantList = value;
|
||||||
|
merchantState = IoniaLoadedMerchantState();
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
|
|
Loading…
Reference in a new issue