@@ -11,6 +11,7 @@ import 'package:commander_ui/src/result.dart';
11
11
class Input with Tools implements Component <Result <String >> {
12
12
final String answer;
13
13
final String ? placeholder;
14
+ final bool secure;
14
15
late final String exitMessage;
15
16
String value = '' ;
16
17
String ? errorMessage;
@@ -21,10 +22,12 @@ class Input with Tools implements Component<Result<String>> {
21
22
Input ({
22
23
required this .answer,
23
24
this .placeholder,
25
+ this .secure = false ,
24
26
Result Function (String value)? validate,
25
27
String ? exitMessage,
26
28
}) {
27
- this .exitMessage = exitMessage ?? '${AsciiColors .red ('✘' )} Operation canceled by user' ;
29
+ this .exitMessage =
30
+ exitMessage ?? '${AsciiColors .red ('✘' )} Operation canceled by user' ;
28
31
this .validate = validate ?? (value) => Ok (null );
29
32
}
30
33
@@ -53,13 +56,19 @@ class Input with Tools implements Component<Result<String>> {
53
56
return ;
54
57
}
55
58
56
- restoreCursorPosition ();
59
+ saveCursorPosition ();
57
60
clearFromCursorToEnd ();
61
+ restoreCursorPosition ();
58
62
showInput ();
59
63
60
64
dispose ();
61
65
62
- stdout.writeln ('${AsciiColors .green ('✔' )} $answer · ${AsciiColors .lightGreen (value )}' );
66
+ final computedValue = secure
67
+ ? AsciiColors .dim (generateValue ())
68
+ : AsciiColors .lightGreen (generateValue ());
69
+
70
+ stdout.writeln ('${AsciiColors .green ('✔' )} $answer · $computedValue }' );
71
+
63
72
saveCursorPosition ();
64
73
_completer.complete (Ok (value));
65
74
}
@@ -79,7 +88,8 @@ class Input with Tools implements Component<Result<String>> {
79
88
errorMessage = null ;
80
89
if (RegExp (r'^[\p{L}\p{N}\p{P}\s\x7F]*$' , unicode: true ).hasMatch (key)) {
81
90
if (key == '\x 7F' && value.isNotEmpty) {
82
- value = value.substring (0 , value.length - 1 ); // Supprimer le dernier caractère
91
+ value = value.substring (
92
+ 0 , value.length - 1 ); // Supprimer le dernier caractère
83
93
} else if (key != '\x 7F' ) {
84
94
value = value + key; // Ajouter le caractère tapé
85
95
}
@@ -88,10 +98,14 @@ class Input with Tools implements Component<Result<String>> {
88
98
}
89
99
}
90
100
101
+ String generateValue () =>
102
+ secure ? value.replaceAll (RegExp (r'.' ), '*' ) : value;
103
+
91
104
void render () async {
92
105
final buffer = StringBuffer ();
93
106
94
- buffer.writeln ('${AsciiColors .yellow ('?' )} $answer : ${AsciiColors .dim (value )}' );
107
+ buffer.writeln (
108
+ '${AsciiColors .yellow ('?' )} $answer : ${AsciiColors .dim (generateValue ())}' );
95
109
if (errorMessage != null ) {
96
110
buffer.writeln (AsciiColors .lightRed (errorMessage! ));
97
111
}
0 commit comments