From d42337fc6ca8ba301c946e0d34db92b35d180dda Mon Sep 17 00:00:00 2001 From: yaso Date: Thu, 25 Jun 2026 11:58:10 +0200 Subject: [PATCH] fix home screen data syncing and caching and add manual sync data button --- mih_ui/lib/mih_config/mih_go_router.dart | 4 +- .../lib/mih_packages/mih_home/mih_home.dart | 30 +++++++---- .../package_tile/mih_home_refresh_tile.dart | 51 +++++++++++++++++++ 3 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 mih_ui/lib/mih_packages/mih_home/package_tile/mih_home_refresh_tile.dart diff --git a/mih_ui/lib/mih_config/mih_go_router.dart b/mih_ui/lib/mih_config/mih_go_router.dart index 36b7a22f..d1756d98 100644 --- a/mih_ui/lib/mih_config/mih_go_router.dart +++ b/mih_ui/lib/mih_config/mih_go_router.dart @@ -171,9 +171,7 @@ class MihGoRouter { path: MihGoRouterPaths.mihHome, builder: (BuildContext context, GoRouterState state) { KenLogger.success("MihGoRouter: mihHome"); - return MihHome( - key: UniqueKey(), - ); + return MihHome(); }, routes: [ // ========================== About MIH ================================== diff --git a/mih_ui/lib/mih_packages/mih_home/mih_home.dart b/mih_ui/lib/mih_packages/mih_home/mih_home.dart index dc81c343..ebc2478b 100644 --- a/mih_ui/lib/mih_packages/mih_home/mih_home.dart +++ b/mih_ui/lib/mih_packages/mih_home/mih_home.dart @@ -42,9 +42,11 @@ class _MihHomeState extends State { context.read(); mzansiProfileProvider.loadCachedProfileState(); if (mzansiProfileProvider.user == null) { - await mzansiProfileProvider.syncWithCloudPipeline(); + await mzansiProfileProvider.syncWithMihServerData(); + } else { + mzansiProfileProvider.syncWithMihServerData(); } - } + } @override void dispose() { @@ -74,18 +76,26 @@ class _MihHomeState extends State { return Consumer( builder: (BuildContext context, MzansiProfileProvider mzansiProfileProvider, Widget? child) { - if (mzansiProfileProvider.user == null) { - return Scaffold( - body: Center( - child: Mihloadingcircle(), - ), - ); - } + if (mzansiProfileProvider.user == null) { + return Scaffold( + body: Center( + child: Mihloadingcircle(), + ), + ); + } return Stack( children: [ RefreshIndicator( + key: mzansiProfileProvider.refreshIndicatorKey, onRefresh: () async { - await mzansiProfileProvider.syncWithCloudPipeline(); + await mzansiProfileProvider.syncWithMihServerData(); + if (context.mounted) { + ScaffoldMessenger.of(context).showSnackBar( + MihSnackBar( + child: Text("Data Synced with MIH Server."), + ), + ); + } }, child: SingleChildScrollView( physics: const AlwaysScrollableScrollPhysics(), diff --git a/mih_ui/lib/mih_packages/mih_home/package_tile/mih_home_refresh_tile.dart b/mih_ui/lib/mih_packages/mih_home/package_tile/mih_home_refresh_tile.dart new file mode 100644 index 00000000..8e7c7d1b --- /dev/null +++ b/mih_ui/lib/mih_packages/mih_home/package_tile/mih_home_refresh_tile.dart @@ -0,0 +1,51 @@ +import 'package:flutter/material.dart'; +import 'package:mih_package_toolkit/mih_package_toolkit.dart'; +import 'package:mzansi_innovation_hub/mih_providers/mzansi_profile_provider.dart'; +import 'package:provider/provider.dart'; + +class MihHomeRefreshTile extends StatefulWidget { + final double packageSize; + const MihHomeRefreshTile({ + super.key, + required this.packageSize, + }); + + @override + State createState() => _MihHomeRefreshTileState(); +} + +class _MihHomeRefreshTileState extends State { + @override + Widget build(BuildContext context) { + return Consumer( + builder: (BuildContext context, MzansiProfileProvider profileProvider, + Widget? child) { + return MihPackageTile( + onTap: profileProvider.triggerRefresh, + packageName: "Sync Data", + packageIcon: Stack( + alignment: Alignment.center, + children: [ + Icon( + MihIcons.mihRing, + color: MihColors.secondary(), + ), + Center( + child: Transform.scale( + scale: 0.75, + origin: Offset(-4, 0), + child: Icon( + Icons.cloud_sync_rounded, + color: MihColors.secondary(), + ), + ), + ), + ], + ), + iconSize: widget.packageSize, + textColor: MihColors.secondary(), + ); + }, + ); + } +}