order load more

This commit is contained in:
efrilm 2025-10-27 21:57:25 +07:00
parent 8bd61eb58e
commit 34555dd789

View File

@ -8,19 +8,39 @@ import '../../../components/error/order_loader_error_state_widget.dart';
import '../../../components/loader/loader_with_text.dart'; import '../../../components/loader/loader_with_text.dart';
import 'order_title.dart'; import 'order_title.dart';
class OrderLeftPanel extends StatelessWidget { class OrderLeftPanel extends StatefulWidget {
final String status; final String status;
final OrderLoaderState state; final OrderLoaderState state;
const OrderLeftPanel({super.key, required this.state, required this.status}); const OrderLeftPanel({super.key, required this.state, required this.status});
@override
State<OrderLeftPanel> createState() => _OrderLeftPanelState();
}
class _OrderLeftPanelState extends State<OrderLeftPanel> {
ScrollController scrollController = ScrollController();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return NotificationListener<ScrollNotification>(
onNotification: (notification) {
if (notification is ScrollEndNotification &&
scrollController.position.extentAfter == 0) {
context.read<OrderLoaderBloc>().add(
OrderLoaderEvent.fetched(status: widget.status),
);
return true;
}
return true;
},
child: Column(
children: [ children: [
OrderTitle( OrderTitle(
startDate: state.startDate, startDate: widget.state.startDate,
endDate: state.endDate, endDate: widget.state.endDate,
title: status == 'pending' ? "Pending Pesanan" : "Daftar Pesanan", title: widget.status == 'pending'
? "Pending Pesanan"
: "Daftar Pesanan",
onChanged: (value) { onChanged: (value) {
Future.delayed(const Duration(milliseconds: 800), () { Future.delayed(const Duration(milliseconds: 800), () {
context.read<OrderLoaderBloc>().add( context.read<OrderLoaderBloc>().add(
@ -35,12 +55,13 @@ class OrderLeftPanel extends StatelessWidget {
}, },
), ),
Expanded( Expanded(
child: state.failureOption.fold(() { child: widget.state.failureOption.fold(
if (state.isFetching) { () {
if (widget.state.isFetching) {
return Center(child: LoaderWithText()); return Center(child: LoaderWithText());
} }
if (state.orders.isEmpty) { if (widget.state.orders.isEmpty) {
return Center( return Center(
child: Text( child: Text(
"Belum ada transaksi saat ini. ", "Belum ada transaksi saat ini. ",
@ -50,22 +71,33 @@ class OrderLeftPanel extends StatelessWidget {
} }
return ListView.builder( return ListView.builder(
itemCount: state.orders.length, itemCount: widget.state.orders.length,
controller: scrollController,
itemBuilder: (context, index) => GestureDetector( itemBuilder: (context, index) => GestureDetector(
onTap: () { onTap: () {
context.read<OrderLoaderBloc>().add( context.read<OrderLoaderBloc>().add(
OrderLoaderEvent.setSelectedOrder(state.orders[index]), OrderLoaderEvent.setSelectedOrder(
widget.state.orders[index],
),
); );
}, },
child: OrderCard( child: OrderCard(
order: state.orders[index], order: widget.state.orders[index],
isActive: state.orders[index] == state.selectedOrder, isActive:
widget.state.orders[index] ==
widget.state.selectedOrder,
), ),
), ),
); );
}, (f) => OrderLoaderErrorStateWidget(failure: f, status: status)), },
(f) => OrderLoaderErrorStateWidget(
failure: f,
status: widget.status,
),
),
), ),
], ],
),
); );
} }
} }