import 'package:dropdown_search/dropdown_search.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/src/widgets/framework.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:nhance_partner/presentation/providers/manager_provider.dart'; import '../../../../core/services/api_service.dart'; import '../../../../data/models/bar_data.dart'; import '../../../providers/userRoleProvider.dart'; import '../../../themes/charts/barChart.dart'; import '../../../themes/charts/barChart_horizontal.dart'; import '../../../themes/indicators/input_field_decoration.dart'; class BussinessDashboard extends ConsumerStatefulWidget { const BussinessDashboard({super.key}); @override ConsumerState createState() => _BussinessDashboardState(); } class _BussinessDashboardState extends ConsumerState { dynamic managerId; late ApiService apiService; String? selectedInsurer; // List> dataVal = []; List> getBusinessDshBdData = []; List> originalData = []; List> filteredData = []; List> brokerWise = []; List> productWise = []; List> insurerWise = []; List> originalBrokerWise = []; List> filteredBrokerWise = []; List> originalProductWise = []; List> filteredProductWise = []; List> originalInsurerWise = []; List> filteredInsurerWise = []; List> getInsuranceTypeData = []; List> filteredInsuranceData = []; final GlobalKey>> dropDownKeyInsurer = GlobalKey>>(); bool isLoading = false; bool isInsureWisePolicy = true; bool isBrokerWisePolicy = true; bool isProductWisePolicy = true; bool showInsurer = true; bool showBroker = true; bool showProduct = true; int selectedView = 0; // 0 = Insurer // 1 = Broker // 2 = Product String? SelctdBusinessbroker; @override void initState() { super.initState(); apiService = ApiService(); Future.microtask(() { // final id = ref.read(managerIdProvider); final roleId = ref.read(userRoleProvider); managerId = ref.read(managerIdProvider); // print("ENQroleId - $roleId"); if (managerId != null) { getBusinessDashBrdList(managerId); } }); } Future getBusinessDashBrdList(id) async { // print('getClaimList called MagId - $managerId - $role'); setState(() { isLoading = true; }); // dynamic id = widget.policyNumber; print('getBusinessDshID - $id'); try { final response = await apiService.findBusinessDashboardData( id, SelctdBusinessbroker, ); if (response['status'] == 'success') { final data = response['data']; print('getBusinessDshBdData - ${response['data']}'); setState(() { if (data is List) { // Already a list of maps getBusinessDshBdData = List>.from(data); } else if (data is Map) { // Single object, wrap in a list getBusinessDshBdData = [Map.from(data)]; } else { getBusinessDshBdData = []; } // getBusinessDshBdData = List>.from(response['data']); originalData = getBusinessDshBdData; filteredData = List.from(originalData); // print('originalData - $getClaimPolicies'); }); if (data is Map) { setState(() { // Store BrokerWise brokerWise = List>.from( data['brokerWise'] ?? [], ); print('brokerWise - ${brokerWise}'); originalBrokerWise = List.from(brokerWise); filteredBrokerWise = List.from(brokerWise); // Store ProductWise productWise = List>.from( data['productWise'] ?? [], ); print('productWise - ${productWise}'); originalProductWise = List.from(productWise); filteredProductWise = List.from(productWise); // Store InsurerWise insurerWise = List>.from( data['insurerWise'] ?? [], ); print('insurerWise - ${insurerWise}'); originalInsurerWise = List.from(insurerWise); filteredInsurerWise = List.from(insurerWise); }); } else { // fallback brokerWise = []; productWise = []; insurerWise = []; } } else { getBusinessDshBdData = []; originalData = []; } } catch (e) { print('Exception occurred: $e'); } finally { setState(() { isLoading = false; }); } } List> getSortedInsurerWise() { double parseDouble(dynamic value) { if (value == null) return 0.0; if (value is num) return value.toDouble(); if (value is String) return double.tryParse(value) ?? 0.0; return 0.0; } final List> sorted = List>.from( filteredInsurerWise, ); sorted.sort((a, b) { final aCurrent = isInsureWisePolicy ? parseDouble(a['total_policies_current_month']) : parseDouble(a['total_premium_current_month']); final aPrev = isInsureWisePolicy ? parseDouble(a['total_policies_pre_month']) : parseDouble(a['total_premium_pre_month']); final bCurrent = isInsureWisePolicy ? parseDouble(b['total_policies_current_month']) : parseDouble(b['total_premium_current_month']); final bPrev = isInsureWisePolicy ? parseDouble(b['total_policies_pre_month']) : parseDouble(b['total_premium_pre_month']); final aMax = aCurrent > aPrev ? aCurrent : aPrev; final bMax = bCurrent > bPrev ? bCurrent : bPrev; return bMax.compareTo(aMax); // DESC }); return sorted; } List buildInsurerBarData(List> sortedList) { double parseDouble(dynamic value) { if (value == null) return 0.0; if (value is num) return value.toDouble(); if (value is String) return double.tryParse(value) ?? 0.0; return 0.0; } return sortedList.map((item) { return BarData( Colors.blue, isInsureWisePolicy ? parseDouble(item['total_policies_current_month']) : parseDouble(item['total_premium_current_month']), isInsureWisePolicy ? parseDouble(item['total_policies_pre_month']) : parseDouble(item['total_premium_pre_month']), item['insurer_id'] ?? '0', 'Insurer', 5, ); }).toList(); } List buildInsurerLabels(List> sortedList) { return sortedList.map((item) { final name = item['short_name']; return (name != null && name.toString().trim().isNotEmpty) ? name.toString() : ''; }).toList(); } List> getSortedBrokerWise() { double parseDouble(dynamic value) { if (value == null) return 0.0; if (value is num) return value.toDouble(); if (value is String) return double.tryParse(value) ?? 0.0; return 0.0; } final List> sorted = List>.from( filteredBrokerWise, ); sorted.sort((a, b) { final aCurrent = isBrokerWisePolicy ? parseDouble(a['total_policies_current_month']) : parseDouble(a['total_premium_current_month']); final aPrev = isBrokerWisePolicy ? parseDouble(a['total_policies_pre_month']) : parseDouble(a['total_premium_pre_month']); final bCurrent = isBrokerWisePolicy ? parseDouble(b['total_policies_current_month']) : parseDouble(b['total_premium_current_month']); final bPrev = isBrokerWisePolicy ? parseDouble(b['total_policies_pre_month']) : parseDouble(b['total_premium_pre_month']); final aMax = aCurrent > aPrev ? aCurrent : aPrev; final bMax = bCurrent > bPrev ? bCurrent : bPrev; return bMax.compareTo(aMax); // 🔥 DESC }); return sorted; } List buildBrokerBarData(List> sortedList) { double parseDouble(dynamic value) { if (value == null) return 0.0; if (value is num) return value.toDouble(); if (value is String) return double.tryParse(value) ?? 0.0; return 0.0; } return sortedList.map((item) { return BarData( Colors.blue, isBrokerWisePolicy ? parseDouble(item['total_policies_current_month']) : parseDouble(item['total_premium_current_month']), isBrokerWisePolicy ? parseDouble(item['total_policies_pre_month']) : parseDouble(item['total_premium_pre_month']), item['broker_id'] ?? '0', 'Broker', 5, ); }).toList(); } List buildBrokerLabels(List> sortedList) { return sortedList.map((item) { final name = item['broker_name']; return (name != null && name.toString().trim().isNotEmpty) ? name.toString() : ''; }).toList(); } List buildBrokerShortNames(List> sortedList) { return sortedList.map((item) { return item['broker_short_name']?.toString() ?? ''; }).toList(); } List> getSortedProductWise() { double parseDouble(dynamic value) { if (value == null) return 0.0; if (value is num) return value.toDouble(); if (value is String) return double.tryParse(value) ?? 0.0; return 0.0; } final List> sorted = List>.from( filteredProductWise, ); sorted.sort((a, b) { final aCurrent = isProductWisePolicy ? parseDouble(a['total_policies_current_month']) : parseDouble(a['total_premium_current_month']); final aPrev = isProductWisePolicy ? parseDouble(a['total_policies_pre_month']) : parseDouble(a['total_premium_pre_month']); final bCurrent = isProductWisePolicy ? parseDouble(b['total_policies_current_month']) : parseDouble(b['total_premium_current_month']); final bPrev = isProductWisePolicy ? parseDouble(b['total_policies_pre_month']) : parseDouble(b['total_premium_pre_month']); final aMax = aCurrent > aPrev ? aCurrent : aPrev; final bMax = bCurrent > bPrev ? bCurrent : bPrev; return bMax.compareTo(aMax); // DESC }); return sorted; } List buildProductBarData(List> sortedList) { double parseDouble(dynamic value) { if (value == null) return 0.0; if (value is num) return value.toDouble(); if (value is String) return double.tryParse(value) ?? 0.0; return 0.0; } return sortedList.map((item) { return BarData( Colors.blue, isProductWisePolicy ? parseDouble(item['total_policies_current_month']) : parseDouble(item['total_premium_current_month']), isProductWisePolicy ? parseDouble(item['total_policies_pre_month']) : parseDouble(item['total_premium_pre_month']), item['vehicle_type']?.toString() ?? '', 'Product', 10, ); }).toList(); } List buildProductLabels(List> sortedList) { return sortedList.map((item) { return item['vehicle_type']?.toString() ?? ''; }).toList(); } List buildProductBarData1() { double parseDouble(dynamic value) { if (value == null) return 0.0; if (value is num) return value.toDouble(); if (value is String) return double.tryParse(value) ?? 0.0; return 0.0; } return filteredProductWise.map((item) { print('policies_current - ${item['total_policies_current_month']}'); print('policies_PREV - ${item['total_policies_pre_month']}'); print('premium_current - ${item['total_premium_current_month']}'); print('premium_PREV - ${item['total_premium_pre_month']}'); return BarData( Colors.blue, isProductWisePolicy ? parseDouble(item['total_policies_current_month']) : parseDouble(item['total_premium_current_month']), isProductWisePolicy ? parseDouble(item['total_policies_pre_month']) : parseDouble(item['total_premium_pre_month']), item['vehicle_type'] != null ? item['vehicle_type'] : '0', 'Product', 10, ); }).toList(); } List buildProductLabels1() { return filteredProductWise.map((item) { final name = item['vehicle_type']; if (name != null && name.toString().trim().isNotEmpty) { return name.toString(); } else { return item['vehicle_type']?.toString() ?? ''; } }).toList(); } @override Widget build(BuildContext context) { return SelectionArea( child: Container( margin: EdgeInsets.only(left: 10, right: 10, bottom: 10), // color: Colors.amber.shade100, child: Column( children: [ Row( // mainAxisAlignment: MainAxisAlignment.center, children: [ Spacer(), Text('Hide and Show Charts : ', style: _styleSmall1), Row( children: [ Transform.scale( scale: 0.75, child: Checkbox( value: showInsurer, onChanged: (val) { setState(() => showInsurer = val!); }, ), ), Text( // showInsurer ? "Insurer" : "Insurer Hidden", "Insurer", style: _styleSmall2, ), ], ), SizedBox(width: 10), Row( children: [ Transform.scale( scale: 0.75, child: Checkbox( value: showBroker, onChanged: (val) { setState(() => showBroker = val!); }, ), ), Text( // showBroker ? "Broker" : "Broker Hidden", "Broker", style: _styleSmall2, ), ], ), SizedBox(width: 10), Row( children: [ Transform.scale( scale: 0.75, child: Checkbox( value: showProduct, onChanged: (val) { setState(() => showProduct = val!); }, ), ), Text( // showProduct ? "Product" : "Product Hidden", "Product", style: _styleSmall2, ), ], ), Spacer(), legendWidget(), ], ), Expanded( child: Row( children: [ (showInsurer || showBroker) ? Expanded( flex: 2, child: Column( children: [ showInsurer ? Expanded(child: insurerContainer()) : SizedBox(), showInsurer ? SizedBox(height: 10) : SizedBox(), showBroker ? Expanded(child: brokerContainer()) : SizedBox(), ], ), ) : SizedBox(), showProduct ? Expanded(flex: 1, child: productContainer()) : SizedBox(), ], ), ), // (showInsurer || showBroker) // ? Expanded( // child: Row( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // // if (showInsurer) Expanded(child: insurerContainer()), // // if (showBroker) Expanded(child: brokerContainer()), // showInsurer // ? Expanded(child: insurerContainer()) // : SizedBox(), // showBroker // ? Expanded(child: brokerContainer()) // : SizedBox(), // // showProduct ? Expanded(child: productContainer()) : SizedBox(), // ], // ), // ) // : SizedBox(), // if (showBroker) ...[ // SizedBox(height: 10), // Expanded( // child: Row( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // showBroker ? Expanded(child: brokerContainer()) : SizedBox(), // ], // ), // ), // ] else ...[ // SizedBox.shrink(), // ], // if (showProduct) ...[ // SizedBox(height: 10), // Expanded( // child: Row( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // showProduct // ? Expanded(child: productContainer()) // : SizedBox(), // ], // ), // ), // ] else ...[ // SizedBox.shrink(), // ], ], ), ) ); } Widget insurerContainer() { // final chartInsurerData = buildInsurerBarData(); // final chartInsurerLabels = buildInsurerLabels(); final sortedInsurer = getSortedInsurerWise(); final chartInsurerData = buildInsurerBarData(sortedInsurer); final chartInsurerLabels = buildInsurerLabels(sortedInsurer); print('chartInsurerData - $chartInsurerData'); print('chartInsurerLabels - $chartInsurerLabels'); return Card( margin: const EdgeInsets.only(right: 10), color: Colors.white, // color: Colors.amber.shade100, elevation: 0.01, // card shadow shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), clipBehavior: Clip.antiAlias, child: Padding( padding: const EdgeInsets.all(4), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Expanded(child: Text('Insurer-Wise', style: _chartHeader)), // buildInsurer(context), Text( isInsureWisePolicy ? "Policies" : "Premium", style: _styleSmall1, ), Transform.scale( scale: 0.5, child: Switch( value: isInsureWisePolicy, onChanged: (val) => setState(() => isInsureWisePolicy = val), ), ), ], ), SizedBox(height: 10), Expanded( child: Container( // color: Colors.amber.shade100, clipBehavior: Clip.none, // color: Colors.red.shade100, child: CustomBarChart( dataList: chartInsurerData, labels: chartInsurerLabels, ), ), ), // legendWidget(), ], ), ), ); } Widget brokerContainer() { // final chartBrokerData = buildBrokerBarData(); // final chartBrokerLabels = buildBrokerLabels(); // final chartBrokerShortName = buildBrokerShortNames(); final sortedBroker = getSortedBrokerWise(); final chartBrokerData = buildBrokerBarData(sortedBroker); final chartBrokerLabels = buildBrokerLabels(sortedBroker); final chartBrokerShortNames = buildBrokerShortNames(sortedBroker); print('chartBrokerData - $chartBrokerData'); print('chartBrokerLabels - $chartBrokerLabels'); return Card( margin: const EdgeInsets.only(right: 10), color: Colors.white, elevation: 0.01, // card shadow shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), clipBehavior: Clip.antiAlias, child: Padding( padding: const EdgeInsets.all(4), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Expanded(child: Text('Broker-Wise', style: _chartHeader)), Text( isBrokerWisePolicy ? "Policies" : "Premium", style: _styleSmall1, ), Transform.scale( scale: 0.5, child: Switch( value: isBrokerWisePolicy, onChanged: (val) => setState(() => isBrokerWisePolicy = val), ), ), ], ), SizedBox(height: 10), Expanded( child: CustomBarChart( dataList: chartBrokerData, labels: chartBrokerShortNames, shortName: chartBrokerLabels, // labels: chartBrokerLabels, // shortName: chartBrokerShortName, ), ), // legendWidget(), ], ), ), ); } Widget productContainer() { final sortedList = getSortedProductWise(); final chartProductData = buildProductBarData(sortedList); final chartProductLabels = buildProductLabels(sortedList); // final chartProductData = buildProductBarData(); // final chartProductLabels = buildProductLabels(); print('chartProductData - $chartProductData'); print('chartProductLabels - $chartProductLabels'); return Card( margin: const EdgeInsets.only(right: 10), color: Colors.white, elevation: 0.01, // card shadow shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), clipBehavior: Clip.antiAlias, child: Padding( padding: const EdgeInsets.all(4.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded(child: Text('Product-Wise', style: _chartHeader)), Text( isProductWisePolicy ? "Policies" : "Premium", style: _styleSmall1, ), Transform.scale( scale: 0.5, child: Switch( value: isProductWisePolicy, onChanged: (val) => setState(() => isProductWisePolicy = val), ), ), ], ), SizedBox(height: 10), Expanded( child: CustomBarChartHorizontal( dataList: chartProductData, labels: chartProductLabels, ), ), // legendWidget(), ], ), ), ); } Widget legendWidget() { return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( Icons.circle, size: 10, color: Color(0xFF34a9a8), // color: Colors.cyan.shade300 ), SizedBox(width: 2), Text('Current Month', style: _styleSmall1), SizedBox(width: 5), Icon( Icons.circle, size: 10, // color: Colors.orange.shade300 color: const Color(0xFFA5E4E1), ), SizedBox(width: 2), Text('Previous Month', style: _styleSmall1), ], ); } // Helper: Insurance plan type dropdown Widget buildInsurer(BuildContext context) { Map? selectedInsurerd = filteredInsurerWise.firstWhere( (item) => item['id'].toString() == selectedInsurer, orElse: () => {}, ); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( height: 20, width: MediaQuery.of(context).size.width * 0.08, child: DropdownSearch>( key: dropDownKeyInsurer, selectedItem: selectedInsurerd.isNotEmpty ? selectedInsurerd : null, // items: (filter, infiniteScrollProps) { // return filteredInsurersData; // }, items: (filter, infiniteScrollProps) async { if (filter.isEmpty) { return filteredInsurerWise; } return filteredInsurerWise.where((item) { return item['short_name'].toString().toLowerCase().contains( filter.toLowerCase(), ); }).toList(); }, itemAsString: (val) => val['short_name'].toString(), // what to show compareFn: (item, selectedItem) => item['id'] == selectedItem['id'], // ✅ compare by id validator: (val) { if (val == null) { return "Required"; // ✅ error message } return null; }, suffixProps: DropdownSuffixProps( // make sure the dropdown button is visible dropdownButtonProps: DropdownButtonProps( isVisible: true, padding: EdgeInsets.zero, // remove default padding constraints: const BoxConstraints( // shrink icon tap area minWidth: 12, minHeight: 12, ), iconSize: 15, // smaller icon // icon: const Icon(Icons.arrow_drop_down), ), ), dropdownBuilder: (context, selectedItem) => Align( alignment: Alignment.centerLeft, child: Text( selectedItem != null ? selectedItem['short_name'].toString() : "", style: GoogleFonts.poppins( fontSize: 11, color: Color(0XFF6366F1), ), overflow: TextOverflow.ellipsis, maxLines: 1, softWrap: false, ), ), decoratorProps: DropDownDecoratorProps( decoration: AppInputDecorations.dropdownDecoration( label: "Insurer", ).copyWith( filled: true, fillColor: Colors.white, // 👈 makes the dropdown input white isDense: true, border: OutlineInputBorder( borderRadius: BorderRadius.circular(5), borderSide: const BorderSide( color: Color(0XFF6366F1), width: 0.5, ), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(5), borderSide: const BorderSide( color: Color(0XFF6366F1), width: 0.5, ), ), contentPadding: EdgeInsets.symmetric( horizontal: 8, vertical: 6, ), ), ), popupProps: PopupProps.menu( fit: FlexFit.loose, constraints: BoxConstraints(maxHeight: 200), menuProps: MenuProps( backgroundColor: Colors.white, // 👈 sets dropdown background to white ), showSearchBox: true, searchFieldProps: TextFieldProps( style: GoogleFonts.inter(fontSize: 11, color: Colors.black), autofocus: true, decoration: InputDecoration( contentPadding: EdgeInsets.all(1), filled: true, fillColor: Colors.white, hintText: "Search Insurer...", hintStyle: GoogleFonts.inter( fontSize: 12, color: Colors.black, ), enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Colors.white, ), // 👈 Normal border ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: Colors.white, width: 1.5, ), // 👈 Focused border ), ), ), itemBuilder: (context, item, isDisabled, isSelected) { return Container( // color: isSelected ? Colors.blue.withOpacity(0.1) : null, padding: const EdgeInsets.symmetric( horizontal: 8, vertical: 3, ), child: Text( item['short_name'].toString(), style: GoogleFonts.inter(fontSize: 12, color: Colors.black), ), ); }, // constraints: BoxConstraints(), ), onChanged: (val) { if (val != null) { print("Selected Insurer : ${val['name']}"); print("Id: ${val['id']}"); selectedInsurer = val['id']; // widget.onInsurerChanged?.call(val['id']); // controllers['agentId']?.text = val['agent_code']; // agentId = agent['id']; } }, ), ), ], ); } List> _filterInsurancePlans(String filter) { if (filter.isEmpty) return filteredInsuranceData; return filteredInsuranceData.where((plan) { return plan['insurance_plan_type'].toString().toLowerCase().contains( filter.toLowerCase(), ); }).toList(); } DropdownSuffixProps _buildDropdownSuffix() { return DropdownSuffixProps( dropdownButtonProps: DropdownButtonProps( isVisible: true, padding: EdgeInsets.zero, constraints: BoxConstraints(minWidth: 12, minHeight: 12), iconSize: 8, color: Colors.black45, ), ); } Widget _buildDropdownDisplay(dynamic selectedItem, String key, String hint) { bool isEmpty = selectedItem == null || selectedItem.isEmpty || selectedItem[key] == null; return Container( padding: EdgeInsets.zero, alignment: Alignment.centerLeft, child: Text( isEmpty ? hint : selectedItem[key].toString(), style: GoogleFonts.poppins( fontSize: 11, color: isEmpty ? Colors.grey.shade500 : Colors.black, fontWeight: FontWeight.w400, ), overflow: TextOverflow.ellipsis, maxLines: 1, softWrap: false, ), ); } DropDownDecoratorProps _buildDropdownDecorator() { return DropDownDecoratorProps( decoration: AppInputDecorations.dropdownDecoration().copyWith( filled: true, fillColor: Colors.white, isDense: true, border: OutlineInputBorder( borderRadius: BorderRadius.circular(5), borderSide: BorderSide(color: Color(0xFFE2E8F0), width: 0.5), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(5), borderSide: BorderSide(color: Color(0xFFE2E8F0), width: 0.5), ), contentPadding: EdgeInsets.symmetric(horizontal: 1, vertical: 6), ), ); } PopupProps> _buildDropdownPopup(String displayKey) { return PopupProps.menu( fit: FlexFit.loose, constraints: BoxConstraints(maxHeight: 300, minWidth: 200), menuProps: MenuProps( backgroundColor: Colors.white, elevation: 8, borderRadius: BorderRadius.circular(8), ), showSearchBox: true, searchFieldProps: TextFieldProps( autofocus: true, decoration: InputDecoration( contentPadding: EdgeInsets.all(8), filled: true, fillColor: Color(0xFFF8FAFC), hintText: "Search...", hintStyle: GoogleFonts.inter(fontSize: 11, color: Colors.grey), border: OutlineInputBorder( borderRadius: BorderRadius.circular(5), borderSide: BorderSide(color: Color(0xFFE2E8F0)), ), ), ), itemBuilder: (context, item, isDisabled, isSelected) { return Container( color: isSelected ? Colors.blue.withOpacity(0.1) : Colors.white, padding: EdgeInsets.symmetric(horizontal: 5, vertical: 5), child: Text( item[displayKey].toString(), style: GoogleFonts.inter( fontSize: 11, color: Colors.black87, fontWeight: isSelected ? FontWeight.w600 : FontWeight.normal, ), ), ); }, ); } } final _headerStyle2 = GoogleFonts.poppins( fontSize: 12, color: Colors.black, fontWeight: FontWeight.w500, ); final _chartHeader = GoogleFonts.poppins( fontSize: 11.5, color: Colors.black, fontWeight: FontWeight.w500, ); final _styleSmall1 = GoogleFonts.poppins( fontSize: 10, fontWeight: FontWeight.w400, ); final _styleSmall2 = GoogleFonts.poppins( fontSize: 10, fontWeight: FontWeight.w400, color: Colors.blueGrey, );