From 1384253e8a7b92e13c72de3bb81fcea6cef4dfdc Mon Sep 17 00:00:00 2001 From: efrilm Date: Fri, 1 Aug 2025 15:12:09 +0700 Subject: [PATCH] feat: sync data page --- .../setting/pages/sync_data_page.dart | 240 +++++++++++------- 1 file changed, 148 insertions(+), 92 deletions(-) diff --git a/lib/presentation/setting/pages/sync_data_page.dart b/lib/presentation/setting/pages/sync_data_page.dart index c1acd55..b64734e 100644 --- a/lib/presentation/setting/pages/sync_data_page.dart +++ b/lib/presentation/setting/pages/sync_data_page.dart @@ -1,4 +1,7 @@ import 'dart:developer'; +import 'package:enaklo_pos/core/components/buttons.dart'; +import 'package:enaklo_pos/core/constants/colors.dart'; +import 'package:enaklo_pos/presentation/setting/widgets/settings_title.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:enaklo_pos/data/datasources/product_local_datasource.dart'; @@ -16,101 +19,154 @@ class _SyncDataPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text('Sync Data'), - ), + backgroundColor: AppColors.background, body: Column( children: [ - BlocConsumer( - listener: (context, state) { - state.maybeWhen( - orElse: () {}, - error: (message) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(message), - backgroundColor: Colors.red, - ), - ); - }, - loaded: (productResponseModel) async { - await ProductLocalDatasource.instance.deleteAllProducts(); - await ProductLocalDatasource.instance.insertProducts( - productResponseModel.data!, - ); - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Sync Product Success2'), - backgroundColor: Colors.green, - ), - ); - }, - ); - }, - builder: (context, state) { - return state.maybeWhen( - orElse: () { - return ElevatedButton( - onPressed: () { - context - .read() - .add(const SyncProductEvent.syncProduct()); - }, - child: const Text('Sync Product')); - }, - loading: () { - return const Center( - child: CircularProgressIndicator(), - ); - }, - ); - }, + SettingsTitle('Sync Data'), + Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + Container( + padding: const EdgeInsets.all(16.0), + margin: const EdgeInsets.only(bottom: 16.0), + decoration: BoxDecoration( + color: AppColors.white, + borderRadius: BorderRadius.circular(8.0), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'Sinkronasikan Produk', + style: TextStyle( + color: AppColors.black, + fontSize: 16, + fontWeight: FontWeight.w500, + ), + ), + BlocConsumer( + listener: (context, state) { + state.maybeWhen( + orElse: () {}, + error: (message) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(message), + backgroundColor: Colors.red, + ), + ); + }, + loaded: (productResponseModel) async { + await ProductLocalDatasource.instance + .deleteAllProducts(); + await ProductLocalDatasource.instance + .insertProducts( + productResponseModel.data!, + ); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Sync Product Success2'), + backgroundColor: Colors.green, + ), + ); + }, + ); + }, + builder: (context, state) { + return state.maybeWhen( + orElse: () { + return Button.filled( + width: 100, + height: 40, + onPressed: () { + context.read().add( + const SyncProductEvent.syncProduct()); + }, + label: 'Sinkronasikan', + ); + }, + loading: () { + return const Center( + child: CircularProgressIndicator(), + ); + }, + ); + }, + ), + ], + ), + ), + Container( + padding: const EdgeInsets.all(16.0), + decoration: BoxDecoration( + color: AppColors.white, + borderRadius: BorderRadius.circular(8.0), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'Sinkronasikan Pesanan', + style: TextStyle( + color: AppColors.black, + fontSize: 16, + fontWeight: FontWeight.w500, + ), + ), + BlocConsumer( + listener: (context, state) { + state.maybeWhen( + orElse: () {}, + error: (message) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(message), + backgroundColor: Colors.red, + ), + ); + }, + loaded: () { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Sync Order Success'), + backgroundColor: Colors.green, + ), + ); + }, + ); + }, + builder: (context, state) { + return state.maybeWhen( + orElse: () { + return Button.filled( + width: 100, + height: 40, + onPressed: () { + log("🔘 Sync Order button pressed"); + log("🔘 SyncOrderBloc instance: ${context.read()}"); + context + .read() + .add(const SyncOrderEvent.syncOrder()); + log("🔘 SyncOrderEvent.syncOrder dispatched"); + }, + label: 'Sinkronasikan', + ); + }, + loading: () { + return const Center( + child: CircularProgressIndicator(), + ); + }, + ); + }, + ) + ], + ), + ), + ], + ), ), - BlocConsumer( - listener: (context, state) { - state.maybeWhen( - orElse: () {}, - error: (message) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(message), - backgroundColor: Colors.red, - ), - ); - }, - loaded: () { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Sync Order Success'), - backgroundColor: Colors.green, - ), - ); - }, - ); - }, - builder: (context, state) { - return state.maybeWhen( - orElse: () { - return ElevatedButton( - onPressed: () { - log("🔘 Sync Order button pressed"); - log("🔘 SyncOrderBloc instance: ${context.read()}"); - context - .read() - .add(const SyncOrderEvent.syncOrder()); - log("🔘 SyncOrderEvent.syncOrder dispatched"); - }, - child: const Text('Sync Order'), - ); - }, - loading: () { - return const Center( - child: CircularProgressIndicator(), - ); - }, - ); - }, - ) ], ), );