75 lines
2.1 KiB
Dart
Raw Normal View History

2025-08-13 00:15:53 +07:00
import 'package:flutter/material.dart';
import '../../../../common/theme/theme.dart';
2025-08-13 01:17:00 +07:00
import '../../../../domain/language/language.dart';
2025-08-13 00:15:53 +07:00
class LanguageTile extends StatelessWidget {
final bool isSelected;
2025-08-13 01:17:00 +07:00
final Language language;
2025-08-13 00:15:53 +07:00
final Function() onTap;
const LanguageTile({
super.key,
required this.isSelected,
required this.language,
required this.onTap,
});
@override
Widget build(BuildContext context) {
return Container(
margin: const EdgeInsets.only(bottom: 8),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: isSelected ? AppColor.primary : AppColor.borderLight,
width: isSelected ? 2 : 1,
),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.05),
blurRadius: 4,
offset: const Offset(0, 2),
),
],
),
child: ListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4),
leading: Container(
width: 48,
height: 48,
decoration: BoxDecoration(
color: Colors.grey[100],
borderRadius: BorderRadius.circular(24),
),
child: Center(
2025-08-13 01:17:00 +07:00
child: Text(language.path, style: const TextStyle(fontSize: 24)),
2025-08-13 00:15:53 +07:00
),
),
title: Text(
2025-08-13 01:17:00 +07:00
language.name,
2025-08-13 00:15:53 +07:00
style: AppStyle.lg.copyWith(
fontWeight: FontWeight.w600,
color: isSelected ? AppColor.primary : AppColor.textPrimary,
),
),
subtitle: Text(
2025-08-13 01:17:00 +07:00
language.nativeName,
2025-08-13 00:15:53 +07:00
style: AppStyle.md.copyWith(
color: isSelected ? AppColor.primary : AppColor.textPrimary,
),
),
trailing: isSelected
? Icon(Icons.check_circle, color: AppColor.primary, size: 24)
: Icon(
Icons.radio_button_unchecked,
color: AppColor.textLight,
size: 24,
),
onTap: onTap,
),
);
}
}