Pour éviter les doublons de code et mutualiser les fonctions textarea et keyboard, il est préférable d'adopter une approche générique avec des paramètres dynamiques pour les événements. Voici les étapes pour mutualiser ou différencier proprement les fonctions entre connexionScreen et optionsScreen.
1. Mutualiser les événements communs
Les fonctions textarea_event_cb
et keyboard_event_cb
peuvent être généralisées pour accepter un contexte spécifique (par exemple, les boutons associés ou des actions spécifiques).
Code générique pour les événements
Ajoutons une structure pour stocker les objets spécifiques à chaque écran :
typedef struct {
lv_obj_t* keyboard; // Clavier virtuel
lv_obj_t* btnValidate; // Bouton "Valider"
} ui_screen_context_t;
2. Mutualiser textarea_event_cb
Voici une version générique de textarea_event_cb
:
void generic_textarea_event_cb(lv_event_t* e) {
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t* textarea = lv_event_get_target(e);
// Récupérer le contexte passé comme user_data
ui_screen_context_t* context = (ui_screen_context_t*)lv_event_get_user_data(e);
3. Mutualiser keyboard_event_cb
Voici une version générique de keyboard_event_cb
:
void generic_keyboard_event_cb(lv_event_t* e) {
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t* keyboard = lv_event_get_target(e);
// Récupérer le contexte passé comme user_data
ui_screen_context_t* context = (ui_screen_context_t*)lv_event_get_user_data(e);
4. Exemple d'intégration dans connexionScreen
Dans ui_connexionScreen_screen_init
, on utilise ces fonctions génériques avec un contexte propre à l'écran.