Mzansi Wallet Display done
This commit is contained in:
parent
003c8b7c0d
commit
f588e9f715
11 changed files with 246 additions and 39 deletions
|
|
@ -4,6 +4,7 @@ import 'package:mzansi_innovation_hub/mih_objects/app_user.dart';
|
|||
import 'package:mzansi_innovation_hub/mih_objects/business.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_objects/business_employee.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_objects/business_user.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_objects/loyalty_card.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_objects/profile_link.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_objects/user_consent.dart';
|
||||
|
||||
|
|
@ -14,5 +15,6 @@ import 'package:mzansi_innovation_hub/mih_objects/user_consent.dart';
|
|||
AdapterSpec<UserConsent>(),
|
||||
AdapterSpec<ProfileLink>(),
|
||||
AdapterSpec<BusinessEmployee>(),
|
||||
AdapterSpec<MIHLoyaltyCard>(),
|
||||
])
|
||||
part 'hive_adapters.g.dart';
|
||||
|
|
|
|||
|
|
@ -338,3 +338,55 @@ class BusinessEmployeeAdapter extends TypeAdapter<BusinessEmployee> {
|
|||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
||||
|
||||
class MIHLoyaltyCardAdapter extends TypeAdapter<MIHLoyaltyCard> {
|
||||
@override
|
||||
final typeId = 6;
|
||||
|
||||
@override
|
||||
MIHLoyaltyCard read(BinaryReader reader) {
|
||||
final numOfFields = reader.readByte();
|
||||
final fields = <int, dynamic>{
|
||||
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
|
||||
};
|
||||
return MIHLoyaltyCard(
|
||||
idloyalty_cards: (fields[0] as num).toInt(),
|
||||
app_id: fields[1] as String,
|
||||
shop_name: fields[2] as String,
|
||||
card_number: fields[3] as String,
|
||||
favourite: fields[4] as String,
|
||||
priority_index: (fields[5] as num).toInt(),
|
||||
nickname: fields[6] as String,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, MIHLoyaltyCard obj) {
|
||||
writer
|
||||
..writeByte(7)
|
||||
..writeByte(0)
|
||||
..write(obj.idloyalty_cards)
|
||||
..writeByte(1)
|
||||
..write(obj.app_id)
|
||||
..writeByte(2)
|
||||
..write(obj.shop_name)
|
||||
..writeByte(3)
|
||||
..write(obj.card_number)
|
||||
..writeByte(4)
|
||||
..write(obj.favourite)
|
||||
..writeByte(5)
|
||||
..write(obj.priority_index)
|
||||
..writeByte(6)
|
||||
..write(obj.nickname);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => typeId.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is MIHLoyaltyCardAdapter &&
|
||||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Generated by Hive CE
|
||||
# Manual modifications may be necessary for certain migrations
|
||||
# Check in to version control
|
||||
nextTypeId: 6
|
||||
nextTypeId: 7
|
||||
types:
|
||||
AppUser:
|
||||
typeId: 0
|
||||
|
|
@ -125,3 +125,21 @@ types:
|
|||
index: 6
|
||||
username:
|
||||
index: 7
|
||||
MIHLoyaltyCard:
|
||||
typeId: 6
|
||||
nextIndex: 7
|
||||
fields:
|
||||
idloyalty_cards:
|
||||
index: 0
|
||||
app_id:
|
||||
index: 1
|
||||
shop_name:
|
||||
index: 2
|
||||
card_number:
|
||||
index: 3
|
||||
favourite:
|
||||
index: 4
|
||||
priority_index:
|
||||
index: 5
|
||||
nickname:
|
||||
index: 6
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ extension HiveRegistrar on HiveInterface {
|
|||
registerAdapter(BusinessAdapter());
|
||||
registerAdapter(BusinessEmployeeAdapter());
|
||||
registerAdapter(BusinessUserAdapter());
|
||||
registerAdapter(MIHLoyaltyCardAdapter());
|
||||
registerAdapter(ProfileLinkAdapter());
|
||||
registerAdapter(UserConsentAdapter());
|
||||
}
|
||||
|
|
@ -22,6 +23,7 @@ extension IsolatedHiveRegistrar on IsolatedHiveInterface {
|
|||
registerAdapter(BusinessAdapter());
|
||||
registerAdapter(BusinessEmployeeAdapter());
|
||||
registerAdapter(BusinessUserAdapter());
|
||||
registerAdapter(MIHLoyaltyCardAdapter());
|
||||
registerAdapter(ProfileLinkAdapter());
|
||||
registerAdapter(UserConsentAdapter());
|
||||
}
|
||||
|
|
|
|||
59
mih_ui/lib/mih_hive/mzansi_wallet_hive_data.dart
Normal file
59
mih_ui/lib/mih_hive/mzansi_wallet_hive_data.dart
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
import 'package:hive_ce_flutter/hive_ce_flutter.dart';
|
||||
import 'package:ken_logger/ken_logger.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_objects/loyalty_card.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart';
|
||||
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_wallet_services.dart';
|
||||
|
||||
class MzansiWalletHiveData {
|
||||
final Box<MIHLoyaltyCard> _loyaltyCardBox =
|
||||
Hive.box<MIHLoyaltyCard>('loyalty_card_box');
|
||||
final Box<MIHLoyaltyCard> _favLoyaltyCardBox =
|
||||
Hive.box<MIHLoyaltyCard>('fav_loyalty_card_box');
|
||||
|
||||
// Get Offline Data
|
||||
List<MIHLoyaltyCard> getCachedLoyaltyCards() {
|
||||
final cards = _loyaltyCardBox.values.toList();
|
||||
cards.sort((a, b) => a.shop_name.compareTo(b.shop_name));
|
||||
return cards;
|
||||
}
|
||||
|
||||
List<MIHLoyaltyCard> getCachedFavLoyaltyCards() {
|
||||
final cards = _favLoyaltyCardBox.values.toList();
|
||||
cards.sort((a, b) => a.shop_name.compareTo(b.shop_name));
|
||||
return cards;
|
||||
}
|
||||
|
||||
// Cache data for offline use
|
||||
Future<void> cacheFavLoyaltyCardsData(
|
||||
List<MIHLoyaltyCard> remoteLoyaltyCards) async {
|
||||
await _favLoyaltyCardBox.clear();
|
||||
await _favLoyaltyCardBox.addAll(remoteLoyaltyCards);
|
||||
KenLogger.success("Favourite Loyalty Cards Cached");
|
||||
}
|
||||
|
||||
Future<void> cacheLoyaltyCardsData(
|
||||
List<MIHLoyaltyCard> remoteFavLoyaltyCards) async {
|
||||
await _loyaltyCardBox.clear();
|
||||
await _loyaltyCardBox.addAll(remoteFavLoyaltyCards);
|
||||
KenLogger.success("Loyalty Cards Cached");
|
||||
}
|
||||
|
||||
// Sync Local Data from data from MIH Server
|
||||
Future<bool> syncWalletWithServer(
|
||||
MzansiProfileProvider profileProvider) async {
|
||||
try {
|
||||
final remoteLoyaltyCards = await MIHMzansiWalletApis.getLoyaltyCardsV2(
|
||||
profileProvider.user!.app_id);
|
||||
cacheLoyaltyCardsData(remoteLoyaltyCards);
|
||||
final remoteFavLoyaltyCards =
|
||||
await MIHMzansiWalletApis.getFavouriteLoyaltyCardsV2(
|
||||
profileProvider.user!.app_id);
|
||||
cacheFavLoyaltyCardsData(remoteFavLoyaltyCards);
|
||||
return true;
|
||||
} catch (error) {
|
||||
KenLogger.warning("App Operating in Offline Mode. Sync Paused");
|
||||
return false;
|
||||
// KenLogger.warning("App operating offline mode. Sync paused: $error");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue