您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

73 行
1.8KB

  1. /// Enum pour les tons de message (Dart 3.10 with enhanced members)
  2. enum MessageTone {
  3. fun('Fun', '😄'),
  4. serious('Sérieux', '💼'),
  5. normal('Normal', '✨'),
  6. oleOle('Olé Olé', '🔥');
  7. final String displayName;
  8. final String emoji;
  9. const MessageTone(this.displayName, this.emoji);
  10. }
  11. /// Enum pour le style de texte
  12. enum TextStyleEnum {
  13. classic('Classique'),
  14. modern('Moderne'),
  15. playful('Ludique');
  16. final String displayName;
  17. const TextStyleEnum(this.displayName);
  18. }
  19. /// Modèle de profil utilisateur (Dart 3.10)
  20. final class UserProfile {
  21. const UserProfile({
  22. required this.profession,
  23. required this.tone,
  24. required this.textStyle,
  25. });
  26. factory UserProfile.fromJson(Map<String, dynamic> json) => UserProfile(
  27. profession: json['profession'] as String? ?? '',
  28. tone: MessageTone.values.firstWhere(
  29. (e) => e.name == json['tone'],
  30. orElse: () => MessageTone.normal,
  31. ),
  32. textStyle: TextStyleEnum.values.firstWhere(
  33. (e) => e.name == json['textStyle'],
  34. orElse: () => TextStyleEnum.classic,
  35. ),
  36. );
  37. final String profession;
  38. final MessageTone tone;
  39. final TextStyleEnum textStyle;
  40. /// Records pour extraction facile des données
  41. (String, MessageTone, TextStyleEnum) toRecord() =>
  42. (profession, tone, textStyle);
  43. Map<String, dynamic> toJson() => <String, dynamic>{
  44. 'profession': profession,
  45. 'tone': tone.name,
  46. 'textStyle': textStyle.name,
  47. };
  48. UserProfile copyWith({
  49. String? profession,
  50. MessageTone? tone,
  51. TextStyleEnum? textStyle,
  52. }) => UserProfile(
  53. profession: profession ?? this.profession,
  54. tone: tone ?? this.tone,
  55. textStyle: textStyle ?? this.textStyle,
  56. );
  57. @override
  58. String toString() =>
  59. 'UserProfile(profession: $profession, tone: ${tone.displayName}, style: ${textStyle.displayName})';
  60. }