import 'package:fcs/domain/constants.dart'; import 'package:fcs/domain/vo/shipment_status.dart'; import 'package:fcs/helpers/theme.dart'; import 'package:flutter/material.dart'; import 'package:flutter_vector_icons/flutter_vector_icons.dart'; import 'package:intl/intl.dart'; import 'package:timeline_list/timeline.dart'; import 'package:timeline_list/timeline_model.dart'; var dateFormatter = new DateFormat('dd MMM yyyy'); class StatusTree extends StatelessWidget { final List? shipmentHistory; final String? currentStatus; const StatusTree({Key? key, this.shipmentHistory, this.currentStatus}) : super(key: key); @override Widget build(BuildContext context) { return ExpansionTile( initiallyExpanded: true, title: Text( 'Status', style: TextStyle(color: primaryColor, fontWeight: FontWeight.bold), ), children: [ Container( padding: EdgeInsets.only(left: 20), height: 400, child: Timeline(children: _models(), position: TimelinePosition.Left), ) ], ); } List _models() { if (shipmentHistory == null || currentStatus == null) return []; bool isPacked = currentStatus != package_received_status && currentStatus != package_processed_status; return shipmentHistory! .map((e) => TimelineModel( Padding( padding: const EdgeInsets.all(18.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(e.status, style: TextStyle( color: e.done! ? primaryColor : Colors.grey, fontSize: 16, fontWeight: FontWeight.bold)), e.done! || isPacked ? Text(dateFormatter.format(e.date)) : Container(), e.staffName == null ? Container() : Text(e.staffName!) ], ), ), iconBackground: e.done! ? primaryColor : Colors.grey, icon: Icon( e.status == "shipped" ? Ionicons.ios_airplane : e.status == "delivered" ? MaterialCommunityIcons.truck_fast : e.status == "packed" ? MaterialCommunityIcons.package : e.status == "processed" ? FontAwesome.dropbox : MaterialCommunityIcons.inbox_arrow_down, color: Colors.white, ))) .toList(); } }