import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:medcify/components/loader.dart'; import 'package:medcify/constants.dart'; import 'package:medcify/models/order_item.dart'; import 'package:medcify/pages/main/orders/orders_bloc.dart'; import 'orders_card.dart'; class OrdersPage extends StatelessWidget { const OrdersPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => OrdersCubit(), child: OrdersWidget(), ); } } class OrdersWidget extends StatelessWidget { late OrdersCubit ordersCubit; @override Widget build(BuildContext context) { ordersCubit = BlocProvider.of(context); ordersCubit.fetchOrders(); return DefaultTabController( length: 3, child: Scaffold( appBar: AppBar( backgroundColor: Colors.white, elevation: 0.25, automaticallyImplyLeading: false, title: const Text("Orders",style: TextStyle(color: Colors.black,fontSize: 17),), bottom: PreferredSize( preferredSize: const Size.fromHeight(50), child: Align( alignment: Alignment.centerLeft, child: TabBar( onTap: ordersCubit.onTap, labelColor: Constants.primaryColor, unselectedLabelColor: Constants.secondaryTextColor, indicatorColor: Constants.primaryColor, isScrollable: true, tabs: const [ Tab( text: "Pending", ), Tab( text: "Completed", ), Tab( text: "Cancelled", ), ], ), ), ), ), body: BlocBuilder( builder: (context, state){ if(state is OrdersLoading){ return const Loader(); }else if(state is OrdersFailure){ return Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 24), child: Text(state.error,style: TextStyle(color: Colors.grey.shade800, fontSize: 13, height: 1.6),), ); }else{ return (ordersCubit.orders.isEmpty) ? Container( alignment: Alignment.center, margin: const EdgeInsets.symmetric(horizontal: 24), child: Text("No orders found",style: TextStyle(color: Colors.grey.shade800, fontSize: 13),), ) : ListView.builder( itemCount: ordersCubit.orders.length, padding: const EdgeInsets.all(16), physics: const BouncingScrollPhysics(), itemBuilder: (context, pos){ OrderItem orderItem = ordersCubit.orders[pos]; return OrdersCard( item: orderItem, currentIndex: ordersCubit.currentIndex, acceptOrder: ordersCubit.acceptOrder, cancelOrder: ordersCubit.cancelOrder, fetchOrders: ordersCubit.fetchOrders ); }, ); } }, ), ), ); } }