petitspas/frontend/lib/widgets/nir_text_field.dart
Julien Martin 721f40599b feat(frontend): NIR 15 car., formatage, validation, widget dédié (#102)
- nir_utils: normalizeNir, formatNir, validateNir (format + clé), Corse 2A/2B
- NirInputFormatter: formatage auto à la saisie (espaces + tiret)
- NirTextField: widget réutilisable pour champ NIR
- professional_info_form_screen: NIR 15 car., affichage formaté à l'init
- custom_app_text_field: paramètre inputFormatters

Refs: #102
Made-with: Cursor
2026-02-26 13:49:57 +01:00

56 lines
1.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/material.dart';
import '../utils/nir_utils.dart';
import 'custom_app_text_field.dart';
/// Champ de saisie dédié au NIR (Numéro d'Inscription au Répertoire 15 caractères).
/// Format affiché : 1 12 34 56 789 012-34 ou 1 12 34 2A 789 012-34 pour la Corse.
/// La valeur envoyée au [controller] est formatée ; utiliser [normalizeNir](controller.text) à la soumission.
class NirTextField extends StatelessWidget {
final TextEditingController controller;
final String labelText;
final String hintText;
final String? Function(String?)? validator;
final double fieldWidth;
final double fieldHeight;
final double labelFontSize;
final double inputFontSize;
final bool enabled;
final bool readOnly;
final CustomAppTextFieldStyle style;
const NirTextField({
super.key,
required this.controller,
this.labelText = 'N° Sécurité Sociale (NIR)',
this.hintText = '15 car. (ex. 1 12 34 56 789 012-34 ou 2A Corse)',
this.validator,
this.fieldWidth = double.infinity,
this.fieldHeight = 53.0,
this.labelFontSize = 18.0,
this.inputFontSize = 18.0,
this.enabled = true,
this.readOnly = false,
this.style = CustomAppTextFieldStyle.beige,
});
@override
Widget build(BuildContext context) {
return CustomAppTextField(
controller: controller,
labelText: labelText,
hintText: hintText,
fieldWidth: fieldWidth,
fieldHeight: fieldHeight,
labelFontSize: labelFontSize,
inputFontSize: inputFontSize,
keyboardType: TextInputType.text,
validator: validator ?? validateNir,
inputFormatters: [NirInputFormatter()],
enabled: enabled,
readOnly: readOnly,
style: style,
);
}
}