import 'package:farm_tpf/presentation/custom_widgets/app_bar_widget.dart'; import 'package:farm_tpf/presentation/custom_widgets/button/second_button.dart'; import 'package:farm_tpf/presentation/screens/codes/cubit/detail_stamp_cubit.dart'; import 'package:farm_tpf/presentation/screens/codes/models/stamp_timeline.dart'; import 'package:farm_tpf/presentation/screens/codes/update_activity_page.dart'; import 'package:farm_tpf/presentation/screens/codes/widgets/item_code_timeline.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get/get.dart'; import 'package:farm_tpf/utils/formatter.dart'; import '../../../themes/styles_text.dart'; import '../../custom_widgets/loading_list_page.dart'; class CodeDetailPage extends StatefulWidget { final int stampId; final String stampCode; const CodeDetailPage({ super.key, required this.stampId, required this.stampCode, }); @override State createState() => _CodeDetailPageState(); } class _CodeDetailPageState extends State { var bloc = DetailStampCubit(); @override void initState() { super.initState(); bloc.preparedData(widget.stampId); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBarWidget( action: IconButton( onPressed: () { // Get.to( // () => UpdateActivityPage( // stampCode: widget.stampCode, // ), // ); }, icon: Icon( Icons.edit, color: Colors.blue, ), ), ), body: Padding( padding: const EdgeInsets.all(8.0), child: Column( children: [ Expanded( child: BlocBuilder( bloc: bloc, builder: (context, state) { if (state is DetailStampLoading) { return Center( child: LoadingListPage(), ); } else if (state is DetailStampFailure) { return Center(child: Text(state.errorMessage)); } else if (state is DetailStampSuccessful) { var stamp = state.stamp; return SingleChildScrollView( child: Column( children: [ _itemCodeDetail( title: 'Tên sản phẩm', detail: 'Cà rốt', titleStyle: StylesText.body4, detailStyle: StylesText.body4.copyWith( color: Colors.blue, ), ), _itemCodeDetail(title: 'Mô tả', detail: stamp.description ?? ''), _itemCodeDetail(title: 'Số lượng tem', detail: stamp.quantity?.formatNumtoStringDecimal().toString() ?? ''), _itemCodeDetail(title: 'Trạng thái', detail: stamp.status ?? ''), _itemCodeDetail(title: 'Hạn sử dụng', detail: stamp.expiredDate?.format_DDMMYY().toString() ?? ''), _itemCodeDetail(title: 'Mẫu tem', detail: stamp.stampType?.exampleStampName ?? ''), const SizedBox( height: 8, ), Text( 'Timeline hoạt động', style: StylesText.body1, ), const SizedBox( height: 8, ), _timelineWidget(state.timeline), ], ), ); } return const SizedBox.shrink(); }, )), const SizedBox( height: 8, ), _actionButtonWidget(), ], ), ), ); } Widget _timelineWidget(StampTimeline timeline) { if ((timeline.content?.length ?? 0) == 0) return const SizedBox.shrink(); return ListView.builder( itemBuilder: (context, index) { return ItemCodeTimeline( item: timeline.content![index], onPressed: () {}, ); }, itemCount: timeline.content?.length ?? 0, physics: NeverScrollableScrollPhysics(), shrinkWrap: true, ); } Widget _actionButtonWidget() { return Wrap( spacing: 8, children: [ Row( children: [ Expanded( child: SecondButton( onPressed: () { bloc.updateStampStatus( stampId: widget.stampId, status: 'ACTIVE', ); }, title: 'Kích hoạt toàn bộ', borderColor: Colors.blue, textColor: Colors.blue, width: double.infinity, height: 40, ), ), Expanded( child: SecondButton( onPressed: () { bloc.updateStampStatus( stampId: widget.stampId, status: 'CANCELED', ); }, title: 'Huỷ toàn bộ', borderColor: Colors.red, textColor: Colors.white, color: Colors.red, width: double.infinity, height: 40, ), ), ], ), const SizedBox( height: 8, ), Row( children: [ Expanded( child: SecondButton( onPressed: () { Get.to( () => UpdateActivityPage( stampCode: widget.stampCode, ), )?.then((value) { if (value != null) { bloc.preparedData(widget.stampId); } }); }, title: 'Cập nhật hoạt động', borderColor: Colors.green, textColor: Colors.green, width: double.infinity, height: 40, ), ), Expanded( child: SecondButton( onPressed: () {}, title: 'In / Xuất file', borderColor: Colors.cyan, textColor: Colors.white, color: Colors.cyan, width: double.infinity, height: 40, ), ), ], ), ], ); } Widget _itemCodeDetail({ required String title, required String detail, TextStyle? titleStyle, TextStyle? detailStyle, }) { return Padding( padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 8), child: Row( children: [ Expanded( child: Text( title, style: titleStyle ?? StylesText.body6, ), ), Text( detail, style: detailStyle ?? StylesText.body6, ) ], ), ); } }