feat: lang

This commit is contained in:
efrilm
2025-08-20 13:52:49 +07:00
parent f07d07b3a8
commit 5a83bc4049
53 changed files with 3386 additions and 721 deletions
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import '../../../../common/extension/extension.dart';
import '../../../../common/theme/theme.dart';
import '../../../../domain/customer/customer.dart';
import '../../../components/spacer/spacer.dart';
@@ -175,78 +176,6 @@ class CustomerCard extends StatelessWidget {
const SpaceHeight(12),
],
// Status Badge
Container(
padding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 6,
),
decoration: BoxDecoration(
color: customer.isActive
? AppColor.success.withOpacity(0.1)
: AppColor.error.withOpacity(0.1),
borderRadius: BorderRadius.circular(16),
border: Border.all(
color: customer.isActive
? AppColor.success.withOpacity(0.3)
: AppColor.error.withOpacity(0.3),
width: 1,
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 8,
height: 8,
decoration: BoxDecoration(
color: customer.isActive
? AppColor.success
: AppColor.error,
shape: BoxShape.circle,
),
),
const SpaceWidth(6),
Text(
customer.isActive ? 'Active' : 'Inactive',
style: AppStyle.sm.copyWith(
color: customer.isActive
? AppColor.success
: AppColor.error,
fontWeight: FontWeight.w600,
),
),
],
),
),
// Additional info if available
if (customer.address.isNotEmpty) ...[
const SpaceHeight(8),
Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(
Icons.location_on_outlined,
size: 14,
color: AppColor.textSecondary,
),
const SpaceWidth(4),
Flexible(
child: Text(
customer.address,
style: AppStyle.xs.copyWith(
color: AppColor.textSecondary,
),
textAlign: TextAlign.center,
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
),
],
),
],
// Metadata info
if (customer.metadata.isNotEmpty && _hasRelevantMetadata()) ...[
const SpaceHeight(8),
@@ -284,7 +213,7 @@ class CustomerCard extends StatelessWidget {
if (customer.createdAt.isNotEmpty) ...[
const SpaceHeight(8),
Text(
'Joined ${_formatDate(customer.createdAt)}',
'${context.lang.joined} ${_formatDate(context, customer.createdAt)}',
style: AppStyle.xs.copyWith(color: AppColor.textSecondary),
textAlign: TextAlign.center,
),
@@ -335,7 +264,7 @@ class CustomerCard extends StatelessWidget {
return colors[index];
}
String _formatDate(String dateStr) {
String _formatDate(BuildContext context, String dateStr) {
try {
final date = DateTime.parse(dateStr);
final now = DateTime.now();
@@ -346,13 +275,13 @@ class CustomerCard extends StatelessWidget {
} else if (difference == 1) {
return 'yesterday';
} else if (difference < 30) {
return '${difference}d ago';
return '${difference}d ${context.lang.ago}';
} else if (difference < 365) {
final months = (difference / 30).floor();
return '${months}mo ago';
return '${months}mo ${context.lang.ago}';
} else {
final years = (difference / 365).floor();
return '${years}y ago';
return '${years}y ${context.lang.ago}';
}
} catch (e) {
return dateStr;
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import '../../../../common/extension/extension.dart';
import '../../../../common/theme/theme.dart';
import '../../../../domain/customer/customer.dart';
import '../../../components/spacer/spacer.dart';
@@ -245,7 +246,9 @@ class CustomerTile extends StatelessWidget {
),
const SpaceWidth(6),
Text(
customer.isActive ? 'Active' : 'Inactive',
customer.isActive
? context.lang.active
: context.lang.inactive,
style: AppStyle.sm.copyWith(
color: customer.isActive
? AppColor.success
@@ -260,7 +263,7 @@ class CustomerTile extends StatelessWidget {
// Created date
if (customer.createdAt.isNotEmpty)
Text(
'Joined ${_formatDate(customer.createdAt)}',
'${context.lang.joined} ${_formatDate(context, customer.createdAt)}',
style: AppStyle.xs.copyWith(
color: AppColor.textSecondary,
),
@@ -326,7 +329,7 @@ class CustomerTile extends StatelessWidget {
return colors[index];
}
String _formatDate(String dateStr) {
String _formatDate(BuildContext context, String dateStr) {
try {
final date = DateTime.parse(dateStr);
final now = DateTime.now();
@@ -337,13 +340,13 @@ class CustomerTile extends StatelessWidget {
} else if (difference == 1) {
return 'yesterday';
} else if (difference < 30) {
return '${difference}d ago';
return '${difference}d ${context.lang.ago}';
} else if (difference < 365) {
final months = (difference / 30).floor();
return '${months}mo ago';
return '${months}mo ${context.lang.ago}';
} else {
final years = (difference / 365).floor();
return '${years}y ago';
return '${years}y ${context.lang.ago}';
}
} catch (e) {
return dateStr;