From 3022d8de9ff9f64e614783fcd8b24f63321a2f7b Mon Sep 17 00:00:00 2001 From: efrilm Date: Fri, 19 Sep 2025 19:12:35 +0700 Subject: [PATCH] null safety --- .../inventory_analytic_response_model.dart | 4 +- ...ayment_method_analytic_response_model.dart | 2 +- .../response/profit_loss_response_model.dart | 20 ++++---- .../report/widgets/profit_loss_widget.dart | 48 ++++++++++--------- .../setting/pages/setting_page.dart | 2 +- .../setting/pages/settings_page.dart | 2 +- .../setting/widgets/settings_title.dart | 2 +- 7 files changed, 41 insertions(+), 39 deletions(-) diff --git a/lib/data/models/response/inventory_analytic_response_model.dart b/lib/data/models/response/inventory_analytic_response_model.dart index 265ae08..ddf81eb 100644 --- a/lib/data/models/response/inventory_analytic_response_model.dart +++ b/lib/data/models/response/inventory_analytic_response_model.dart @@ -160,7 +160,7 @@ class InventoryProductItem { final String categoryName; final int quantity; final int reorderLevel; - final int unitCost; + final num unitCost; final int totalValue; final int totalIn; final int totalOut; @@ -228,7 +228,7 @@ class InventoryIngredientItem { final String unitName; final int quantity; final int reorderLevel; - final int unitCost; + final num unitCost; final int totalValue; final int totalIn; final int totalOut; diff --git a/lib/data/models/response/payment_method_analytic_response_model.dart b/lib/data/models/response/payment_method_analytic_response_model.dart index e5d5bd4..ee61c57 100644 --- a/lib/data/models/response/payment_method_analytic_response_model.dart +++ b/lib/data/models/response/payment_method_analytic_response_model.dart @@ -132,7 +132,7 @@ class PaymentMethodAnalyticItem { final int totalAmount; final int orderCount; final int paymentCount; - final int percentage; + final num percentage; PaymentMethodAnalyticItem({ required this.paymentMethodId, diff --git a/lib/data/models/response/profit_loss_response_model.dart b/lib/data/models/response/profit_loss_response_model.dart index 102abf7..0585d76 100644 --- a/lib/data/models/response/profit_loss_response_model.dart +++ b/lib/data/models/response/profit_loss_response_model.dart @@ -98,12 +98,12 @@ class ProfitLossData { class ProfitLossSummary { final int totalRevenue; - final int totalCost; - final int grossProfit; + final num totalCost; + final num grossProfit; final double grossProfitMargin; final int totalTax; final int totalDiscount; - final int netProfit; + final num netProfit; final double netProfitMargin; final int totalOrders; final double averageProfit; @@ -159,12 +159,12 @@ class ProfitLossSummary { class ProfitLossItem { final String date; final int revenue; - final int cost; - final int grossProfit; + final num cost; + final num grossProfit; final double grossProfitMargin; final int tax; final int discount; - final int netProfit; + final num netProfit; final double netProfitMargin; final int orders; @@ -219,12 +219,12 @@ class ProfitLossProduct { final String categoryName; final int quantitySold; final int revenue; - final int cost; - final int grossProfit; + final num cost; + final num grossProfit; final double grossProfitMargin; final int averagePrice; - final int averageCost; - final int profitPerUnit; + final num averageCost; + final num profitPerUnit; ProfitLossProduct({ required this.productId, diff --git a/lib/presentation/report/widgets/profit_loss_widget.dart b/lib/presentation/report/widgets/profit_loss_widget.dart index d536d01..c767ca1 100644 --- a/lib/presentation/report/widgets/profit_loss_widget.dart +++ b/lib/presentation/report/widgets/profit_loss_widget.dart @@ -73,26 +73,28 @@ class ProfitLossWidget extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - title, - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - color: Color(0xFF0F172A), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + title, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Color(0xFF0F172A), + ), ), - ), - const SizedBox(height: 6), - Text( - 'Analisis profitabilitas dan margin keuntungan', - style: TextStyle( - fontSize: 14, - color: Colors.grey[600], + const SizedBox(height: 6), + Text( + 'Analisis profitabilitas dan margin keuntungan', + style: TextStyle( + fontSize: 14, + color: Colors.grey[600], + ), ), - ), - ], + ], + ), ), Container( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 10), @@ -628,7 +630,7 @@ class ProfitLossWidget extends StatelessWidget { ); } - Widget _buildProductMetric(String label, int value, Color color) { + Widget _buildProductMetric(String label, num value, Color color) { return Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( @@ -722,7 +724,7 @@ class ProfitLossWidget extends StatelessWidget { sections: breakdownData.asMap().entries.map((entry) { final item = entry.value; final grossProfit = data.summary.grossProfit; - final value = item['value'] as int; + final value = item['value'] as num; // Handle division by zero final percentage = @@ -772,7 +774,7 @@ class ProfitLossWidget extends StatelessWidget { ), ), Text( - _formatCurrency(item['value'] as int), + _formatCurrency(item['value'] as num), style: const TextStyle( fontSize: 12, fontWeight: FontWeight.bold, @@ -1154,7 +1156,7 @@ class ProfitLossWidget extends StatelessWidget { return AppColorProfitLoss.danger; } - String _formatCurrency(int amount) { + String _formatCurrency(num amount) { final formatter = NumberFormat.currency( locale: 'id_ID', symbol: 'Rp ', @@ -1163,7 +1165,7 @@ class ProfitLossWidget extends StatelessWidget { return formatter.format(amount); } - String _formatCurrencyShort(int amount) { + String _formatCurrencyShort(num amount) { if (amount >= 1000000) { return 'Rp ${(amount / 1000000).round()}M'; } else if (amount >= 1000) { diff --git a/lib/presentation/setting/pages/setting_page.dart b/lib/presentation/setting/pages/setting_page.dart index d835371..aae5a8c 100644 --- a/lib/presentation/setting/pages/setting_page.dart +++ b/lib/presentation/setting/pages/setting_page.dart @@ -41,7 +41,7 @@ class _SettingPageState extends State { vertical: 12.0, ), width: double.infinity, - height: context.deviceHeight * 0.1, + height: context.deviceHeight * 0.12, decoration: const BoxDecoration( color: AppColors.white, border: Border( diff --git a/lib/presentation/setting/pages/settings_page.dart b/lib/presentation/setting/pages/settings_page.dart index 6c5833b..c6441ce 100644 --- a/lib/presentation/setting/pages/settings_page.dart +++ b/lib/presentation/setting/pages/settings_page.dart @@ -63,7 +63,7 @@ class _SettingsPageState extends State { vertical: 12.0, ), width: double.infinity, - height: context.deviceHeight * 0.1, + height: context.deviceHeight * 0.12, decoration: const BoxDecoration( color: AppColors.white, border: Border( diff --git a/lib/presentation/setting/widgets/settings_title.dart b/lib/presentation/setting/widgets/settings_title.dart index bcb8222..d26c05a 100644 --- a/lib/presentation/setting/widgets/settings_title.dart +++ b/lib/presentation/setting/widgets/settings_title.dart @@ -23,7 +23,7 @@ class SettingsTitle extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - height: context.deviceHeight * 0.1, + height: context.deviceHeight * 0.12, padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0), decoration: BoxDecoration( color: AppColors.white,