Advertisement
abimulya_

Untitled

Oct 23rd, 2024
17
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 10.60 KB | None | 0 0
  1. // ignore_for_file: public_member_api_docs, sort_constructors_first
  2. import 'package:auto_route/auto_route.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_bloc/flutter_bloc.dart';
  5. import 'package:flutter_hooks/flutter_hooks.dart';
  6. import 'package:flutter_screenutil/flutter_screenutil.dart';
  7. import 'package:flutter_svg/flutter_svg.dart';
  8. import 'package:get/get_utils/src/extensions/context_extensions.dart';
  9. import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
  10.  
  11. import '../../../../../core/bloc/trigger_fetch_paging_list/trigger_fetch_paging_list_cubit.dart';
  12. import '../../../../../core/components/paging/widget/custom_pagination_view.dart';
  13. import '../../../../../core/components/space/space_component.dart';
  14. import '../../../../../core/config/router/router.dart';
  15. import '../../../../../core/config/theme/theme.dart';
  16. import '../../../../../core/utils/currency_util.dart';
  17. import '../../../domain/model/list/list_by_day/sales_order_list_by_day_model.dart';
  18. import '../../bloc/list/list_by_day/cubit/sales_order_list_by_day_cubit.dart';
  19. import '../../bloc/list/list_by_status/cubit/sales_order_list_by_status_cubit.dart';
  20. import 'sales_order_list_by_status_view.dart';
  21.  
  22. class SalesOrderListByDayStatusView extends HookWidget {
  23.   const SalesOrderListByDayStatusView({
  24.     super.key,
  25.     required this.branchIdSelected,
  26.     required this.branchSelected,
  27.   });
  28.   final int branchIdSelected;
  29.   final String branchSelected;
  30.  
  31.   @override
  32.   Widget build(BuildContext context) {
  33.     final PagingController<int, SalesOrderListByDayModel> _pagingController =
  34.         useMemoized(() => PagingController(firstPageKey: 1));
  35.  
  36.     useEffect(() {
  37.       _pagingController.addPageRequestListener((pageKey) {
  38.         context.read<SalesOrderListByDayCubit>().fetchSalesOrderListByDay(
  39.               pageKey: pageKey,
  40.               pagingController: _pagingController,
  41.               retryData: pageKey != 1 ? false : true,
  42.             );
  43.       });
  44.       _pagingController.refresh();
  45.  
  46.       return () {
  47.         _pagingController.dispose();
  48.       };
  49.     }, [_pagingController]);
  50.  
  51.     return Container(
  52.       width: 1.sw,
  53.       height: 1.sh,
  54.       color: AccurateColor.grayBlue,
  55.       child: MultiBlocListener(
  56.         listeners: [
  57.           BlocListener<TriggerFetchPagingListCubit, bool>(
  58.             listener: (context, state) => {
  59.               if (state)
  60.                 {
  61.                   Future.sync(
  62.                     () => _pagingController.refresh(),
  63.                   ),
  64.                 }
  65.             },
  66.           ),
  67.           BlocListener<SalesOrderListByDayCubit, SalesOrderListByDayState>(
  68.             listener: (context, state) => state.maybeWhen(
  69.               orElse: () => null,
  70.               failed: (failure) {
  71.                 return _pagingController.error = failure;
  72.               },
  73.             ),
  74.           ),
  75.         ],
  76.         child: CustomPaginationView(
  77.           pagingController: _pagingController,
  78.           customRefresh: () {
  79.             return context
  80.                 .read<SalesOrderListByStatusCubit>()
  81.                 .getSalesOrderByStatus();
  82.           },
  83.           topWidget: () => Column(
  84.             children: [
  85.               SalesOrderListByStatusView(
  86.                 branchSelected: branchSelected,
  87.                 branchIdSelected: branchIdSelected,
  88.               ),
  89.               BlocBuilder<SalesOrderListByDayCubit, SalesOrderListByDayState>(
  90.                 builder: (context, state) => state.maybeWhen(
  91.                   orElse: () => const SizedBox.shrink(),
  92.                   loading: () => const SizedBox.shrink(),
  93.                   failed: (_) => const SizedBox.shrink(),
  94.                   success: () => context
  95.                           .read<SalesOrderListByDayCubit>()
  96.                           .listData
  97.                           .isNotEmpty
  98.                       ? Container(
  99.                           margin: EdgeInsets.all(kDefLeftRight),
  100.                           child: Row(
  101.                             mainAxisAlignment: MainAxisAlignment.spaceBetween,
  102.                             children: [
  103.                               Text(
  104.                                 'Daftar Faktur Penjualan',
  105.                                 style: context.textTheme.titleLarge,
  106.                               ),
  107.                               GestureDetector(
  108.                                 onTap: () {
  109.                                   context.pushRoute(
  110.                                     SalesOrderRoute(
  111.                                       isInitialData: false,
  112.                                       soTitle: 'Semua Pesanan Penjualan',
  113.                                       branchSelected: branchSelected,
  114.                                       branchIdSelected: branchIdSelected,
  115.                                     ),
  116.                                   );
  117.                                 },
  118.                                 child: Text(
  119.                                   'Lihat Semua',
  120.                                   style: context.textTheme.titleLarge!.copyWith(
  121.                                     color: AccurateColor.blueAccurate,
  122.                                   ),
  123.                                 ),
  124.                               ),
  125.                             ],
  126.                           ),
  127.                         )
  128.                       : const SizedBox.shrink(),
  129.                 ),
  130.               ),
  131.             ],
  132.           ),
  133.           onEmptyData: () => Column(
  134.             mainAxisAlignment: MainAxisAlignment.center,
  135.             children: [
  136.               SvgPicture.asset('assets/svg/ic_no_data.svg'),
  137.               SpaceComponentHeight(
  138.                 height: 15.h,
  139.               ),
  140.               Text(
  141.                 'Belum memiliki Catatan Pesanan',
  142.                 style: context.textTheme.headlineLarge!,
  143.               ),
  144.               SpaceComponentHeight(
  145.                 height: 10.h,
  146.               ),
  147.               RichText(
  148.                 text: TextSpan(
  149.                   text:
  150.                       'Anda belum memiliki catatan pesanan penjualan. Silakan klik tombol',
  151.                   style: context.textTheme.bodyLarge!.copyWith(
  152.                     color: AccurateColor.black50,
  153.                   ),
  154.                   children: [
  155.                     TextSpan(
  156.                       text: ' + ',
  157.                       style: context.textTheme.titleLarge,
  158.                     ),
  159.                     TextSpan(
  160.                       text: 'untuk membuat catatan pesanan penjualan',
  161.                       style: context.textTheme.bodyLarge!.copyWith(
  162.                         color: AccurateColor.black50,
  163.                       ),
  164.                     )
  165.                   ],
  166.                 ),
  167.                 textAlign: TextAlign.center,
  168.               ),
  169.             ],
  170.           ),
  171.           listItemBuilder: (item) {
  172.             return GestureDetector(
  173.               onTap: () async {
  174.                 context.pushRoute(
  175.                   SalesOrderRoute(
  176.                     isInitialData: false,
  177.                     soTitle:
  178.                         '${item.transDateView!.contains('Hari Ini') || item.transDateView!.contains('Kemarin') ? 'Pesanan Penjualan' : 'Pesanan'} ${item.transDateView}',
  179.                     branchSelected: branchSelected,
  180.                     branchIdSelected: branchIdSelected,
  181.                     transDate: item.transDate,
  182.                   ),
  183.                 );
  184.               },
  185.               child: Container(
  186.                 width: 0.9.sw,
  187.                 height: 80.h,
  188.                 decoration: BoxDecoration(
  189.                   color: Colors.white,
  190.                   borderRadius: BorderRadius.circular(10.r),
  191.                 ),
  192.                 margin: EdgeInsets.only(
  193.                   bottom: kDefTopBottom,
  194.                   left: kDefLeftRight,
  195.                   right: kDefLeftRight,
  196.                 ),
  197.                 child: Row(
  198.                   children: [
  199.                     Container(
  200.                       width: 10.w,
  201.                       height: 80.h,
  202.                       decoration: BoxDecoration(
  203.                         color: item.transDateView!.contains('Hari ini')
  204.                             ? AccurateColor.blueAccurate
  205.                             : AccurateColor.black50,
  206.                         borderRadius: BorderRadius.only(
  207.                           topLeft: Radius.circular(10.r),
  208.                           bottomLeft: Radius.circular(10.r),
  209.                         ),
  210.                       ),
  211.                     ),
  212.                     Container(
  213.                       padding: EdgeInsets.all(kDefLeftRight),
  214.                       width: 0.85.sw,
  215.                       child: Column(
  216.                         children: [
  217.                           Row(
  218.                             mainAxisAlignment: MainAxisAlignment.spaceBetween,
  219.                             children: [
  220.                               Text(
  221.                                 item.transDateView!,
  222.                                 style: context.textTheme.bodyLarge,
  223.                               ),
  224.                               Container(
  225.                                 constraints: BoxConstraints(maxWidth: 0.35.sw),
  226.                                 child: Text(
  227.                                   CurrencyUtil.applyCurrencyFormatting(
  228.                                     item.totalAmount.toString(),
  229.                                   ),
  230.                                   style: context.textTheme.titleLarge,
  231.                                   overflow: TextOverflow.ellipsis,
  232.                                 ),
  233.                               ),
  234.                             ],
  235.                           ),
  236.                           const SpaceComponentHeight(),
  237.                           Row(
  238.                             children: [
  239.                               SvgPicture.asset(
  240.                                   'assets/svg/sales_order/ic_so_item_amount.svg'),
  241.                               SpaceComponentWidth(
  242.                                 width: 6.w,
  243.                               ),
  244.                               Text(
  245.                                 '${item.count} Pesanan',
  246.                                 style: context.textTheme.bodySmall!.copyWith(
  247.                                   color: AccurateColor.black50,
  248.                                 ),
  249.                               ),
  250.                             ],
  251.                           )
  252.                         ],
  253.                       ),
  254.                     ),
  255.                   ],
  256.                 ),
  257.               ),
  258.             );
  259.           },
  260.         ),
  261.       ),
  262.     );
  263.   }
  264. }
  265.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement