From 844e4c48f5e2077c0866dc4b291a90bd34fbf805 Mon Sep 17 00:00:00 2001 From: sindhu Date: Wed, 17 Jan 2024 11:40:11 +0700 Subject: [PATCH] step 23 : home screen, repository, provider --- app_petty_cash/images/background_card.png | Bin 0 -> 50510 bytes app_petty_cash/lib/app/constant.dart | 14 + .../lib/model/info_account_balance.dart | 21 ++ .../lib/model/list_transaksi_model.dart | 64 ++++ ...current_info_account_balance_provider.dart | 11 + .../lib/repository/home_repository.dart | 61 ++++ .../lib/screen/home/home_screen.dart | 345 +++++++++++++++++- .../home/info_account_balance_provider.dart | 75 ++++ .../home/list_transaksi_home_provider.dart | 72 ++++ 9 files changed, 661 insertions(+), 2 deletions(-) create mode 100644 app_petty_cash/images/background_card.png create mode 100644 app_petty_cash/lib/model/info_account_balance.dart create mode 100644 app_petty_cash/lib/model/list_transaksi_model.dart create mode 100644 app_petty_cash/lib/provider/current_info_account_balance_provider.dart create mode 100644 app_petty_cash/lib/repository/home_repository.dart create mode 100644 app_petty_cash/lib/screen/home/info_account_balance_provider.dart create mode 100644 app_petty_cash/lib/screen/home/list_transaksi_home_provider.dart diff --git a/app_petty_cash/images/background_card.png b/app_petty_cash/images/background_card.png new file mode 100644 index 0000000000000000000000000000000000000000..0b209a6661811aaa5bf6c2b228d86176465135b6 GIT binary patch literal 50510 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%0DNE8+R2hik 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 json) { + totalAll = json['total_all']; + kredit = json['kredit']; + debit = json['debit']; + } + + Map toJson() { + final Map data = new Map(); + data['total_all'] = this.totalAll; + data['kredit'] = this.kredit; + data['debit'] = this.debit; + return data; + } +} \ No newline at end of file diff --git a/app_petty_cash/lib/model/list_transaksi_model.dart b/app_petty_cash/lib/model/list_transaksi_model.dart new file mode 100644 index 0000000..aa964e6 --- /dev/null +++ b/app_petty_cash/lib/model/list_transaksi_model.dart @@ -0,0 +1,64 @@ +class ListTransaksiHomeModel { + String? id; + String? tanggaltransaksi; + String? tipe; + String? kategoriid; + String? kategoriname; + String? note; + String? amount; + String? sender; + String? imgurl; + String? isconfirm; + String? tanggalconfirm; + String? usertransaksi; + String? userconfirm; + + ListTransaksiHomeModel( + {this.id, + this.tanggaltransaksi, + this.tipe, + this.kategoriid, + this.kategoriname, + this.note, + this.amount, + this.sender, + this.imgurl, + this.isconfirm, + this.tanggalconfirm, + this.usertransaksi, + this.userconfirm}); + + ListTransaksiHomeModel.fromJson(Map json) { + id = json['id']; + tanggaltransaksi = json['tanggaltransaksi']; + tipe = json['tipe']; + kategoriid = json['kategoriid']; + kategoriname = json['kategoriname']; + note = json['note']; + amount = json['amount']; + sender = json['sender']; + imgurl = json['imgurl']; + isconfirm = json['isconfirm']; + tanggalconfirm = json['tanggalconfirm']; + usertransaksi = json['usertransaksi']; + userconfirm = json['userconfirm']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['tanggaltransaksi'] = this.tanggaltransaksi; + data['tipe'] = this.tipe; + data['kategoriid'] = this.kategoriid; + data['kategoriname'] = this.kategoriname; + data['note'] = this.note; + data['amount'] = this.amount; + data['sender'] = this.sender; + data['imgurl'] = this.imgurl; + data['isconfirm'] = this.isconfirm; + data['tanggalconfirm'] = this.tanggalconfirm; + data['usertransaksi'] = this.usertransaksi; + data['userconfirm'] = this.userconfirm; + return data; + } +} \ No newline at end of file diff --git a/app_petty_cash/lib/provider/current_info_account_balance_provider.dart b/app_petty_cash/lib/provider/current_info_account_balance_provider.dart new file mode 100644 index 0000000..7f6c611 --- /dev/null +++ b/app_petty_cash/lib/provider/current_info_account_balance_provider.dart @@ -0,0 +1,11 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../model/info_account_balance.dart'; + +final currentInfoAccountBalanceProvider = StateProvider( + ((ref) => InfoAccountBalanceModel( + debit: "0", + kredit: "0", + totalAll: "0", + )), +); \ No newline at end of file diff --git a/app_petty_cash/lib/repository/home_repository.dart b/app_petty_cash/lib/repository/home_repository.dart new file mode 100644 index 0000000..e2b9f17 --- /dev/null +++ b/app_petty_cash/lib/repository/home_repository.dart @@ -0,0 +1,61 @@ +import 'package:app_petty_cash/model/list_type_model.dart'; + +import '../app/constant.dart'; +import '../model/info_account_balance.dart'; +import '../model/list_transaksi_model.dart'; +import 'base_repository.dart'; + +class HomeRepository extends BaseRepository { + HomeRepository({required super.dio}); + + // list transaksi home + Future> getTransaksiListHome( + String companyid, + ) async { + final service = + "${Constant.baseUrlDevone}homescreen/list_transaction/?companyid=$companyid"; + final resp = await get( + // param: { + // "": "", + // }, + service: service, + ); + + print("url list transaksi home : $service"); + + final result = List.empty(growable: true); + resp['data'].forEach((e) { + final model = ListTransaksiHomeModel.fromJson(e); + result.add(model); + }); + return result; + } + + // info account balance + Future getInfoAccountBalance( + String companyid, + ) async { + final service = + "${Constant.baseUrlDevone}homescreen/list_total/?companyid=$companyid"; + final resp = await get( + // param: { + // "": "", + // }, + service: service, + ); + + print("url card info account balance home : $service"); + + InfoAccountBalanceModel result = InfoAccountBalanceModel( + debit: "0", + kredit: "0", + totalAll: "0", + ); + + print(resp['data']); + + final model = InfoAccountBalanceModel.fromJson(resp['data']); + result = model; + return result; + } +} diff --git a/app_petty_cash/lib/screen/home/home_screen.dart b/app_petty_cash/lib/screen/home/home_screen.dart index b279317..bd8f783 100644 --- a/app_petty_cash/lib/screen/home/home_screen.dart +++ b/app_petty_cash/lib/screen/home/home_screen.dart @@ -1,17 +1,34 @@ +import 'dart:convert'; + +import 'package:app_petty_cash/screen/home/info_account_balance_provider.dart'; +import 'package:app_petty_cash/screen/home/list_transaksi_home_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import '../../app/constant.dart'; import '../../app/route.dart'; +import '../../model/info_account_balance.dart'; +import '../../model/list_transaksi_model.dart'; +import '../../provider/current_info_account_balance_provider.dart'; import '../../provider/current_user_provider.dart'; import '../../widget/custom_drawer.dart'; +import '../../widget/history_row_atas_widget.dart'; +import '../../widget/sankbar_widget.dart'; class HomeScreen extends HookConsumerWidget { const HomeScreen({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { + final M_CompanyID = useState("0"); + final searchTransaksiHomeLoading = useState(false); + final infoAccountBalanceHomeLoading = useState(false); + final listTransaksiHome = useState>( + List.empty(growable: true), + ); + useEffect(() { WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { final userID = ref.read(currentUserProvider)?.model.M_UserID ?? "0"; @@ -27,6 +44,80 @@ class HomeScreen extends HookConsumerWidget { return () {}; }, []); + Future getCompanyID() async { + final shared = await SharedPreferences.getInstance(); + String M_CompanyID = "0"; + + if (shared != null) { + final bearerString = shared.get(Constant.bearerName).toString(); + final xmodel = jsonDecode(bearerString); + if (xmodel != null) { + M_CompanyID = xmodel["model"]["M_CompanyID"]; + } + } + + if (M_CompanyID == "0") { + // throw BaseRepositoryException(message: 'Invalid Company ID'); + } + + return M_CompanyID; + } + + useEffect(() { + WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { + M_CompanyID.value = await getCompanyID(); + // info account balance + ref + .read(infoAccountBalanceHomeProvider.notifier) + .infoAccountBalanceHome(M_CompanyID.value); + }); + return () {}; + }, []); + + // read provider home + ref.listen( + listTransaksiHomeProvider, + (previous, next) { + if (next is ListTransaksiHomeStateLoading) { + searchTransaksiHomeLoading.value = true; + } else if (next is ListTransaksiHomeStateError) { + // print(next.message); + searchTransaksiHomeLoading.value = false; + SanckbarWidget(context, next.message, snackbarType.error); + } else if (next is ListTransaksiHomeStateDone) { + // print(jsonEncode(next.model)); + // print(next.model.length); + listTransaksiHome.value = next.model; + searchTransaksiHomeLoading.value = false; + } + }, + ); + + // read provider info account balance + ref.listen( + infoAccountBalanceHomeProvider, + (previous, next) { + if (next is InfoAccountBalanceHomeStateLoading) { + infoAccountBalanceHomeLoading.value = true; + } else if (next is InfoAccountBalanceHomeStateError) { + // print(next.message); + infoAccountBalanceHomeLoading.value = false; + SanckbarWidget(context, next.message, snackbarType.error); + } else if (next is InfoAccountBalanceHomeStateDone) { + // print(jsonEncode(next.model)); + // print(next.model.length); + // infoAccountBalanceObject.value = next.model; + ref.read(currentInfoAccountBalanceProvider.notifier).state = + InfoAccountBalanceModel( + kredit: next.model.kredit, + debit: next.model.debit, + totalAll: next.model.totalAll, + ); + infoAccountBalanceHomeLoading.value = false; + } + }, + ); + return Padding( padding: EdgeInsets.only( top: Constant.getActualYPhone(context: context, y: 30), @@ -44,8 +135,258 @@ class HomeScreen extends HookConsumerWidget { ), drawer: CustomDrawer(), body: SafeArea( - child: Center( - child: Text('Home Screen Content'), + child: Padding( + padding: EdgeInsets.only( + top: Constant.getActualYPhone(context: context, y: 36), + left: Constant.getActualXPhone(context: context, x: 34), + right: Constant.getActualXPhone(context: context, x: 34), + ), + child: RefreshIndicator( + onRefresh: () async { + ref + .read(infoAccountBalanceHomeProvider.notifier) + .infoAccountBalanceHome(M_CompanyID.value); + }, + child: Container( + width: Constant.getActualXPhone(context: context, x: 390), + height: Constant.getActualYPhone(context: context, y: 844), + child: Column( + children: [ + Container( + width: Constant.getActualXPhone(context: context, x: 332), + height: + Constant.getActualYPhone(context: context, y: 173), + decoration: BoxDecoration( + // color: Colors.black12, + borderRadius: BorderRadius.circular(20), + image: DecorationImage( + image: AssetImage('images/background_card.png'), + fit: BoxFit.cover, + ), + boxShadow: [ + BoxShadow( + color: Color.fromRGBO(145, 158, 171, 0.16), + offset: Offset(0, 24), + blurRadius: 48, + ), + ], + ), + //Isi Card + child: (infoAccountBalanceHomeLoading.value) + ? Center( + child: CircularProgressIndicator(), + ) + : Container( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + // Text1 & Text2 + Padding( + padding: EdgeInsets.only( + top: Constant.getActualYPhone( + context: context, y: 17), + left: Constant.getActualXPhone( + context: context, x: 81), + right: Constant.getActualXPhone( + context: context, x: 81), + ), + child: Column( + children: [ + Text( + 'Account Balance', + style: Constant.body1( + context: context) + .copyWith( + fontWeight: FontWeight.w400, + color: Constant.textWhite), + ), + Text( + ref + .watch( + currentInfoAccountBalanceProvider) + .totalAll + .toString(), + style: Constant.H4_700V3( + context: context) + .copyWith( + color: Constant.textWhite, + ), + ), + ], + ), + ), + + SizedBox( + height: Constant.getActualYPhone( + context: context, y: 27), + ), + + //Debit dan Kredit + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + // Spasi di sebelah kiri "Check In" + Expanded( + child: Padding( + padding: EdgeInsets.only( + left: Constant.getActualXPhone( + context: context, x: 20), + ), + child: Column( + children: [ + Text( + 'Debit', + style: Constant.body1( + context: context) + .copyWith( + fontWeight: + FontWeight.w400, + color: + Constant.textWhite), + ), + Text( + ref + .watch( + currentInfoAccountBalanceProvider) + .debit + .toString(), + style: Constant.H4_700V3( + context: context) + .copyWith( + color: + Constant.textWhite), + ), + ], + ), + ), + ), + + // SizedBox( + // width: Constant.getActualXPhone( + // context: context, x: 51), + // ), + + Expanded( + child: Padding( + padding: EdgeInsets.only( + right: Constant.getActualXPhone( + context: context, x: 28), + ), + child: Column( + children: [ + Text( + 'Credit', + style: Constant.body1( + context: context) + .copyWith( + fontWeight: + FontWeight.w400, + color: + Constant.textWhite), + ), + Text( + ref + .watch( + currentInfoAccountBalanceProvider) + .kredit + .toString(), + style: Constant.H4_700V3( + context: context) + .copyWith( + color: + Constant.textWhite), + ), + ], + ), + ), + ), + ], + ), + SizedBox( + height: Constant.getActualYPhone( + context: context, y: 17), + ), + ], + ), + ), + ), + + SizedBox( + height: Constant.getActualYPhone(context: context, y: 44), + ), + + Align( + alignment: Alignment.centerLeft, + child: Text( + 'Transaksi Terkini', + style: Constant.titleH5_600(context: context) + .copyWith(color: Constant.textBlack), + ), + ), + + SizedBox( + height: Constant.getActualYPhone(context: context, y: 24), + ), + + // list transaksi + (searchTransaksiHomeLoading.value) + ? Center( + child: CircularProgressIndicator(), + ) + : Container( + child: Expanded( + child: ListView.builder( + itemCount: listTransaksiHome.value.length, + itemBuilder: (context, idx) { + return Padding( + padding: EdgeInsets.only( + bottom: Constant.getActualYPhone( + context: context, + y: 10, + ), + ), + child: Card( + elevation: 2.0, + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // mainAxisAlignment: MainAxisAlignment.start, + children: [ + // atas + HistoryRowAtasWidget( + icon_category_id: + listTransaksiHome + .value[idx].kategoriid + .toString(), + icon_category_name: + listTransaksiHome + .value[idx].kategoriname + .toString(), + amount: listTransaksiHome + .value[idx].amount + .toString(), + tglTransaksi: listTransaksiHome + .value[idx].tanggaltransaksi + .toString(), + tipe: listTransaksiHome + .value[idx].tipe + .toString(), + ), + ], + ), + ), + ), + ); + }, + ), + ), + ), + ], + ), + ), + ), ), ), ), diff --git a/app_petty_cash/lib/screen/home/info_account_balance_provider.dart b/app_petty_cash/lib/screen/home/info_account_balance_provider.dart new file mode 100644 index 0000000..34a3b03 --- /dev/null +++ b/app_petty_cash/lib/screen/home/info_account_balance_provider.dart @@ -0,0 +1,75 @@ +import 'package:app_petty_cash/provider/current_info_account_balance_provider.dart'; +import 'package:app_petty_cash/repository/home_repository.dart'; +import 'package:equatable/equatable.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../../model/info_account_balance.dart'; +import '../../provider/dio_provider.dart'; +import '../../repository/base_repository.dart'; +import 'list_transaksi_home_provider.dart'; + +abstract class InfoAccountBalanceHomeState extends Equatable { + final DateTime date; + const InfoAccountBalanceHomeState(this.date); + @override + List get props => [date]; +} + +class InfoAccountBalanceHomeStateInit extends InfoAccountBalanceHomeState { + InfoAccountBalanceHomeStateInit() : super(DateTime.now()); +} + +class InfoAccountBalanceHomeStateLoading extends InfoAccountBalanceHomeState { + InfoAccountBalanceHomeStateLoading() : super(DateTime.now()); +} + +class InfoAccountBalanceHomeStateError extends InfoAccountBalanceHomeState { + final String message; + InfoAccountBalanceHomeStateError({ + required this.message, + }) : super(DateTime.now()); +} + +class InfoAccountBalanceHomeStateDone extends InfoAccountBalanceHomeState { + final InfoAccountBalanceModel model; + // final String resp; + InfoAccountBalanceHomeStateDone({ + required this.model, + }) : super(DateTime.now()); +} + +//notifier +class InfoAccountBalanceHomeNotifier + extends StateNotifier { + final Ref ref; + InfoAccountBalanceHomeNotifier({ + required this.ref, + }) : super(InfoAccountBalanceHomeStateInit()); + + void infoAccountBalanceHome( + String companyid, + ) async { + try { + state = InfoAccountBalanceHomeStateLoading(); + final dio = ref.read(dioProvider); + final resp = await HomeRepository(dio: dio).getInfoAccountBalance( + companyid, + ); + state = InfoAccountBalanceHomeStateDone(model: resp); + // list transaksi home + ref.read(listTransaksiHomeProvider.notifier).listTransaksiHome(companyid); + } catch (e) { + if (e is BaseRepositoryException) { + state = InfoAccountBalanceHomeStateError(message: e.message.toString()); + } else { + state = InfoAccountBalanceHomeStateError(message: e.toString()); + } + } + } +} + +//provider +final infoAccountBalanceHomeProvider = StateNotifierProvider< + InfoAccountBalanceHomeNotifier, InfoAccountBalanceHomeState>( + (ref) => InfoAccountBalanceHomeNotifier(ref: ref), +); diff --git a/app_petty_cash/lib/screen/home/list_transaksi_home_provider.dart b/app_petty_cash/lib/screen/home/list_transaksi_home_provider.dart new file mode 100644 index 0000000..1c254a9 --- /dev/null +++ b/app_petty_cash/lib/screen/home/list_transaksi_home_provider.dart @@ -0,0 +1,72 @@ + +import 'package:app_petty_cash/repository/home_repository.dart'; +import 'package:equatable/equatable.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../../model/list_transaksi_model.dart'; +import '../../repository/transaksi_repository.dart'; +import '../../provider/dio_provider.dart'; +import '../../repository/base_repository.dart'; + +abstract class ListTransaksiHomeState extends Equatable { + final DateTime date; + const ListTransaksiHomeState(this.date); + @override + List get props => [date]; +} + +class ListTransaksiHomeStateInit extends ListTransaksiHomeState { + ListTransaksiHomeStateInit() : super(DateTime.now()); +} + +class ListTransaksiHomeStateLoading extends ListTransaksiHomeState { + ListTransaksiHomeStateLoading() : super(DateTime.now()); +} + +class ListTransaksiHomeStateError extends ListTransaksiHomeState { + final String message; + ListTransaksiHomeStateError({ + required this.message, + }) : super(DateTime.now()); +} + +class ListTransaksiHomeStateDone extends ListTransaksiHomeState { + final List model; + // final String resp; + ListTransaksiHomeStateDone({ + required this.model, + }) : super(DateTime.now()); +} + +//notifier +class ListTransaksiHomeNotifier extends StateNotifier { + final Ref ref; + ListTransaksiHomeNotifier({ + required this.ref, + }) : super(ListTransaksiHomeStateInit()); + + void listTransaksiHome( + String companyid, + ) async { + try { + state = ListTransaksiHomeStateLoading(); + final dio = ref.read(dioProvider); + final resp = await HomeRepository(dio: dio).getTransaksiListHome( + companyid, + ); + state = ListTransaksiHomeStateDone(model: resp); + } catch (e) { + if (e is BaseRepositoryException) { + state = ListTransaksiHomeStateError(message: e.message.toString()); + } else { + state = ListTransaksiHomeStateError(message: e.toString()); + } + } + } +} + +//provider +final listTransaksiHomeProvider = + StateNotifierProvider( + (ref) => ListTransaksiHomeNotifier(ref: ref), +);