Advertisement
abimulya_

Sales Order Menu Widget

Dec 16th, 2024
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 6.00 KB | None | 0 0
  1. import 'package:accurate_lite/core/components/space/space_component.dart';
  2. import 'package:accurate_lite/core/config/router/router.dart';
  3. import 'package:accurate_lite/core/module/init/presentation/cubit/new_init_cubit.dart';
  4. import 'package:auto_route/auto_route.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:flutter_bloc/flutter_bloc.dart';
  7. import 'package:flutter_screenutil/flutter_screenutil.dart';
  8. import 'package:flutter_svg/flutter_svg.dart';
  9.  
  10. import '../../../../core/config/theme/theme.dart';
  11.  
  12. class MenuWidget extends StatelessWidget {
  13.   const MenuWidget({super.key});
  14.  
  15.   @override
  16.   Widget build(BuildContext context) {
  17.     final _theme = Theme.of(context);
  18.     final _listMenu = getMenuItems(context); // Fetch the menu items
  19.     final _listCreateMenu =
  20.         getCreateMenuItems(context); // Fetch the create menu items
  21.  
  22.     return Container(
  23.       padding: EdgeInsets.all(kDefLeftRight),
  24.       margin: EdgeInsets.only(bottom: 50.r),
  25.       child: Column(
  26.         crossAxisAlignment: CrossAxisAlignment.start,
  27.         mainAxisSize: MainAxisSize.min,
  28.         children: [
  29.           Text(
  30.             'Fitur Anda',
  31.             style: _theme.textTheme.titleLarge,
  32.             textAlign: TextAlign.start,
  33.           ),
  34.           SpaceComponentHeight(
  35.             height: 20.h,
  36.           ),
  37.           SizedBox(
  38.             height: 100.h,
  39.             child: GridView.builder(
  40.               physics: const NeverScrollableScrollPhysics(),
  41.               gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
  42.                 maxCrossAxisExtent: 90.r,
  43.               ),
  44.               itemCount: _listMenu.length,
  45.               itemBuilder: (context, index) {
  46.                 final menuItem = _listMenu[index];
  47.                 return GestureDetector(
  48.                   onTap: () => menuItem.onTapCallback(context),
  49.                   child: Column(
  50.                     mainAxisAlignment: MainAxisAlignment.start,
  51.                     crossAxisAlignment: CrossAxisAlignment.center,
  52.                     children: [
  53.                       Padding(
  54.                         padding: EdgeInsets.all(6.r),
  55.                         child: SvgPicture.asset(menuItem.image),
  56.                       ),
  57.                       Text(
  58.                         menuItem.title,
  59.                         style: _theme.textTheme.bodyMedium,
  60.                         textAlign: TextAlign.center,
  61.                       ),
  62.                     ],
  63.                   ),
  64.                 );
  65.               },
  66.             ),
  67.           ),
  68.           Text(
  69.             'Buat Transaksi Baru',
  70.             style: _theme.textTheme.titleLarge,
  71.             textAlign: TextAlign.start,
  72.           ),
  73.           SpaceComponentHeight(
  74.             height: 20.h,
  75.           ),
  76.           SizedBox(
  77.             height: 100.h,
  78.             child: GridView.builder(
  79.               physics: const NeverScrollableScrollPhysics(),
  80.               gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
  81.                 maxCrossAxisExtent: 90.r,
  82.                 mainAxisExtent: 100.r,
  83.               ),
  84.               itemBuilder: (context, index) {
  85.                 final createMenuItem = _listCreateMenu[index];
  86.                 return GestureDetector(
  87.                   onTap: () => createMenuItem.onTapCallback(context),
  88.                   child: Column(
  89.                     mainAxisAlignment: MainAxisAlignment.start,
  90.                     crossAxisAlignment: CrossAxisAlignment.center,
  91.                     children: [
  92.                       SvgPicture.asset(
  93.                         createMenuItem.image,
  94.                       ),
  95.                       Text(
  96.                         createMenuItem.title,
  97.                         style: _theme.textTheme.bodyMedium,
  98.                         textAlign: TextAlign.center,
  99.                       ),
  100.                     ],
  101.                   ),
  102.                 );
  103.               },
  104.               itemCount: _listCreateMenu.length,
  105.             ),
  106.           ),
  107.         ],
  108.       ),
  109.     );
  110.   }
  111.  
  112.   List<MenuItem> getMenuItems(BuildContext context) {
  113.     final activeMenu = context.read<NewInitCubit>().activeMenu;
  114.  
  115.     final menuItems = [
  116.       MenuItem(
  117.         image: "assets/svg/menu/ic_sales_order.svg",
  118.         title: "Pesanan Penjualan",
  119.         isActive: activeMenu.salesOrder ?? false,
  120.         onTapCallback: (context) {
  121.           context.pushRoute(SalesOrderRoute());
  122.         },
  123.       ),
  124.       MenuItem(
  125.         image: "assets/svg/menu/ic_product_stock.svg",
  126.         title: "Stok Produk",
  127.         isActive: activeMenu.item ?? false,
  128.         onTapCallback: (context) {
  129.           context.pushRoute(ProductStockListRoute());
  130.         },
  131.       ),
  132.       MenuItem(
  133.         image: "assets/svg/menu/ic_customer.svg",
  134.         title: "Pelanggan",
  135.         isActive: activeMenu.customer ?? false,
  136.         onTapCallback: (context) {
  137.           context.pushRoute(CustomerRoute());
  138.         },
  139.       ),
  140.       MenuItem(
  141.         image: "assets/svg/menu/ic_report.svg",
  142.         title: "Laporan",
  143.         isActive: activeMenu.report ?? false,
  144.         onTapCallback: (context) {
  145.           context.pushRoute(ReportListRoute());
  146.         },
  147.       ),
  148.     ];
  149.     // Filter the menu items to return only those with isActive == true
  150.     return menuItems.where((menuItem) => menuItem.isActive).toList();
  151.   }
  152.  
  153.   List<MenuItem> getCreateMenuItems(BuildContext context) {
  154.     final activeMenu = context.read<NewInitCubit>().activeMenu;
  155.  
  156.     return [
  157.       MenuItem(
  158.         image: "assets/svg/menu/ic_create_sales_order.svg",
  159.         title: "Pesanan Penjualan",
  160.         isActive: activeMenu.salesOrder ?? false,
  161.         onTapCallback: (context) {
  162.           context.pushRoute(SalesOrderAddUpdateRoute());
  163.         },
  164.       ),
  165.     ];
  166.   }
  167. }
  168.  
  169. class MenuItem {
  170.   final String image;
  171.   final String title;
  172.   final bool isActive;
  173.   final Function(BuildContext) onTapCallback;
  174.  
  175.   MenuItem({
  176.     required this.image,
  177.     required this.title,
  178.     required this.isActive,
  179.     required this.onTapCallback,
  180.   });
  181. }
  182.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement