import 'package:flutter/material.dart'; import '../design_system/tokens/app_colors.dart'; import '../design_system/tokens/app_typography.dart'; /// UnionFlow Mobile - Composant DRY : CoreTextField /// Champ de texte minimaliste, fin, sans bordures massives. class CoreTextField extends StatelessWidget { final String hintText; final IconData? prefixIcon; final bool obscureText; final TextEditingController? controller; final TextInputType keyboardType; final String? errorText; const CoreTextField({ Key? key, required this.hintText, this.prefixIcon, this.obscureText = false, this.controller, this.keyboardType = TextInputType.text, this.errorText, }) : super(key: key); @override Widget build(BuildContext context) { final isDark = Theme.of(context).brightness == Brightness.dark; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ TextField( controller: controller, obscureText: obscureText, keyboardType: keyboardType, style: AppTypography.actionText, // Texte d'entrée assez lisible decoration: InputDecoration( hintText: hintText, hintStyle: AppTypography.subtitleSmall.copyWith( color: isDark ? AppColors.textSecondaryDark : AppColors.textSecondaryLight, ), prefixIcon: prefixIcon != null ? Icon(prefixIcon, size: 20, color: AppColors.primaryGreen) : null, filled: true, fillColor: isDark ? AppColors.darkSurface : AppColors.lightSurface, contentPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 10), border: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: isDark ? AppColors.darkBorder : AppColors.lightBorder, width: 1, ), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: isDark ? AppColors.darkBorder : AppColors.lightBorder, width: 1, ), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(8), borderSide: const BorderSide( color: AppColors.primaryGreen, width: 2, ), ), errorText: errorText, errorStyle: AppTypography.badgeText.copyWith(color: AppColors.error), ), ), ], ); } }