Files
ai_english/client/lib/features/profile/widgets/learning_preferences_card.dart
2025-11-17 14:09:17 +08:00

100 lines
3.1 KiB
Dart

import 'package:flutter/material.dart';
import '../../../core/theme/app_colors.dart';
import '../../../core/theme/app_text_styles.dart';
import '../../../core/theme/app_dimensions.dart';
/// 学习偏好卡片组件
class LearningPreferencesCard extends StatelessWidget {
final String title;
final Widget child;
final EdgeInsetsGeometry? padding;
final VoidCallback? onTap;
final IconData? icon;
const LearningPreferencesCard({
super.key,
required this.title,
required this.child,
this.padding,
this.onTap,
this.icon,
});
@override
Widget build(BuildContext context) {
return Container(
width: double.infinity,
decoration: BoxDecoration(
color: AppColors.surface,
borderRadius: BorderRadius.circular(AppDimensions.radiusMd),
border: Border.all(
color: AppColors.primary.withOpacity(0.1),
width: 1,
),
boxShadow: [
BoxShadow(
color: AppColors.shadow.withOpacity(0.05),
blurRadius: 8,
offset: const Offset(0, 2),
),
],
),
child: Material(
color: Colors.transparent,
child: InkWell(
onTap: onTap,
borderRadius: BorderRadius.circular(AppDimensions.radiusMd),
child: Padding(
padding: padding ?? const EdgeInsets.all(AppDimensions.spacingMd),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// 标题行
Row(
children: [
if (icon != null) ...[
Container(
padding: const EdgeInsets.all(AppDimensions.spacingSm),
decoration: BoxDecoration(
color: AppColors.primary.withOpacity(0.1),
borderRadius: BorderRadius.circular(AppDimensions.radiusSm),
),
child: Icon(
icon,
color: AppColors.primary,
size: 20,
),
),
const SizedBox(width: AppDimensions.spacingSm),
],
Expanded(
child: Text(
title,
style: AppTextStyles.titleMedium.copyWith(
color: AppColors.onSurface,
fontWeight: FontWeight.w600,
),
),
),
if (onTap != null)
Icon(
Icons.chevron_right,
color: AppColors.onSurfaceVariant,
size: 20,
),
],
),
const SizedBox(height: AppDimensions.spacingMd),
// 内容
child,
],
),
),
),
),
);
}
}