import 'package:enaklo_pos/core/components/dashed_divider.dart'; import 'package:enaklo_pos/core/components/spaces.dart'; import 'package:enaklo_pos/core/constants/colors.dart'; import 'package:enaklo_pos/core/extensions/build_context_ext.dart'; import 'package:enaklo_pos/data/models/response/customer_response_model.dart'; import 'package:enaklo_pos/presentation/customer/bloc/customer_loader/customer_loader_bloc.dart'; import 'package:enaklo_pos/presentation/customer/widgets/customer_card.dart'; import 'package:enaklo_pos/presentation/customer/widgets/customer_title.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; class CustomerPage extends StatefulWidget { const CustomerPage({super.key}); @override State createState() => _CustomerPageState(); } class _CustomerPageState extends State { Customer? _customer; @override void initState() { super.initState(); context .read() .add(const CustomerLoaderEvent.getCustomer()); } @override Widget build(BuildContext context) { return SafeArea( child: Scaffold( backgroundColor: AppColors.background, body: Row( children: [ Expanded( flex: 2, child: Material( color: AppColors.white, child: Column( children: [ CustomerTitle( title: 'Daftar Pelanggan', onChanged: (value) {}, ), Expanded( child: BlocBuilder( builder: (context, state) { return state.maybeWhen( orElse: () => Center( child: CircularProgressIndicator(), ), loading: () => Center( child: CircularProgressIndicator(), ), error: (message) => Center( child: Text( message, style: TextStyle( fontSize: 16.0, fontWeight: FontWeight.bold, ), ), ), loaded: (customers, totalCustomer) => ListView.builder( itemCount: customers.length, itemBuilder: (context, index) { final customer = customers[index]; return CustomerCard( customer: customer, isActive: customer == _customer, onTap: () { setState(() { _customer = customer; }); }, ); }, ), ); }, ), ), ], ), ), ), Expanded( flex: 4, child: _customer == null ? Center( child: Text( "Belum ada pelanggan yang dipilih.", style: TextStyle( fontSize: 16.0, fontWeight: FontWeight.bold, ), ), ) : Center( child: Container( width: context.deviceHeight * 0.5, height: context.deviceHeight * 0.6, decoration: BoxDecoration( color: AppColors.white, borderRadius: BorderRadius.circular(8), ), child: Column( children: [ Padding( padding: const EdgeInsets.symmetric( horizontal: 12.0, vertical: 16.0, ), child: Column( children: [ CircleAvatar( radius: 24, backgroundColor: AppColors.primary, child: Icon(Icons.person, color: Colors.white), ), const SizedBox(height: 12), Text( _customer?.name ?? "", style: TextStyle( fontSize: 16.0, fontWeight: FontWeight.bold, ), ) ], ), ), DashedDivider(color: AppColors.stroke), Padding( padding: const EdgeInsets.symmetric( horizontal: 12.0, vertical: 16.0, ), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'No. Handphone', style: TextStyle( fontSize: 12.0, ), ), Text( _customer?.phone ?? "-", style: TextStyle( fontSize: 12.0, fontWeight: FontWeight.w600, ), ), ], ), SpaceHeight(8), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Email', style: TextStyle( fontSize: 12.0, ), ), Text( _customer?.email ?? "-", style: TextStyle( fontSize: 12.0, fontWeight: FontWeight.w600, ), ), ], ), SpaceHeight(8), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Alamat', style: TextStyle( fontSize: 12.0, ), ), Text( _customer?.address ?? "-", style: TextStyle( fontSize: 12.0, fontWeight: FontWeight.w600, ), ), ], ), ], ), ), ], ), ), ), ), ], ), ), ); } }