feat: diskon page

This commit is contained in:
efrilm
2025-08-01 15:41:02 +07:00
parent 8c946ce3d9
commit 8e4a289625
4 changed files with 107 additions and 110 deletions
@@ -1,3 +1,5 @@
import 'package:enaklo_pos/core/components/buttons.dart';
import 'package:enaklo_pos/core/constants/colors.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:enaklo_pos/presentation/setting/bloc/discount/discount_bloc.dart';
@@ -5,7 +7,6 @@ import 'package:enaklo_pos/presentation/setting/bloc/discount/discount_bloc.dart
import '../../home/widgets/custom_tab_bar.dart';
import '../dialogs/form_discount_dialog.dart';
import '../models/discount_model.dart';
import '../widgets/add_data.dart';
import '../widgets/manage_discount_card.dart';
import '../widgets/settings_title.dart';
@@ -49,83 +50,94 @@ class _DiscountPageState extends State<DiscountPage> {
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const SettingsTitle('Kelola Diskon'),
const SizedBox(height: 24),
CustomTabBar(
tabTitles: const ['Semua'],
initialTabIndex: 0,
tabViews: [
// SEMUA TAB
SizedBox(
child: BlocBuilder<DiscountBloc, DiscountState>(
builder: (context, state) {
return state.maybeWhen(orElse: () {
return const Center(
child: CircularProgressIndicator(),
);
}, loaded: (discounts) {
return GridView.builder(
shrinkWrap: true,
itemCount: discounts.length + 1,
physics: const NeverScrollableScrollPhysics(),
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
childAspectRatio: 0.85,
crossAxisCount: 3,
crossAxisSpacing: 30.0,
mainAxisSpacing: 30.0,
),
itemBuilder: (context, index) {
if (index == 0) {
return AddData(
title: 'Tambah Diskon Baru',
onPressed: onAddDataTap,
return Column(
children: [
SettingsTitle(
'Kelola Diskon',
subtitle: 'Kelola diskon untuk produk Anda',
actionWidget: [
Button.outlined(
onPressed: onAddDataTap,
label: "Tambah Diskon",
icon: Icon(Icons.add, color: AppColors.primary),
)
],
),
Expanded(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
CustomTabBar(
tabTitles: const ['Semua'],
initialTabIndex: 0,
tabViews: [
// SEMUA TAB
SizedBox(
child: BlocBuilder<DiscountBloc, DiscountState>(
builder: (context, state) {
return state.maybeWhen(orElse: () {
return const Center(
child: CircularProgressIndicator(),
);
}
final item = discounts[index - 1];
return ManageDiscountCard(
data: item,
onEditTap: (){},
);
}, loaded: (discounts) {
return GridView.builder(
shrinkWrap: true,
itemCount: discounts.length,
physics: const NeverScrollableScrollPhysics(),
padding:
const EdgeInsets.symmetric(horizontal: 16.0),
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
childAspectRatio: 0.85,
crossAxisCount: 3,
crossAxisSpacing: 30.0,
mainAxisSpacing: 30.0,
),
itemBuilder: (context, index) {
final item = discounts[index];
return ManageDiscountCard(
data: item,
onEditTap: () {},
);
},
);
});
// return GridView.builder(
// shrinkWrap: true,
// itemCount: discounts.length + 1,
// physics: const NeverScrollableScrollPhysics(),
// gridDelegate:
// const SliverGridDelegateWithFixedCrossAxisCount(
// childAspectRatio: 0.85,
// crossAxisCount: 3,
// crossAxisSpacing: 30.0,
// mainAxisSpacing: 30.0,
// ),
// itemBuilder: (context, index) {
// if (index == 0) {
// return AddData(
// title: 'Tambah Diskon Baru',
// onPressed: onAddDataTap,
// );
// }
// final item = discounts[index - 1];
// return ManageDiscountCard(
// data: item,
// onEditTap: () => onEditTap(item),
// );
// },
// );
},
);
});
// return GridView.builder(
// shrinkWrap: true,
// itemCount: discounts.length + 1,
// physics: const NeverScrollableScrollPhysics(),
// gridDelegate:
// const SliverGridDelegateWithFixedCrossAxisCount(
// childAspectRatio: 0.85,
// crossAxisCount: 3,
// crossAxisSpacing: 30.0,
// mainAxisSpacing: 30.0,
// ),
// itemBuilder: (context, index) {
// if (index == 0) {
// return AddData(
// title: 'Tambah Diskon Baru',
// onPressed: onAddDataTap,
// );
// }
// final item = discounts[index - 1];
// return ManageDiscountCard(
// data: item,
// onEditTap: () => onEditTap(item),
// );
// },
// );
},
),
),
],
),
),
],
],
),
),
],
),
),
],
);
}
}