@@ -75,6 +75,22 @@ String getOption(
7575 return value;
7676}
7777
78+ List <String > _unwrap (dynamic value) {
79+ if (value == null ) {
80+ return [];
81+ } else if (value is String ) {
82+ return [value];
83+ } else if (value is List <String >) {
84+ return value;
85+ } else if (value is List ) {
86+ return value.map ((e) => e.toString ()).toList ();
87+ } else {
88+ throw ArgumentError (
89+ 'Invalid type for value (${value .runtimeType }): $value ' ,
90+ );
91+ }
92+ }
93+
7894List <String > getMultiOption (
7995 ArgResults results,
8096 String name,
@@ -85,7 +101,7 @@ List<String> getMultiOption(
85101 List <String > startingOptions = const [],
86102 String ? desc,
87103}) {
88- var value = results[name] as List < String > ? ?? [] ;
104+ var value = _unwrap ( results[name]) ;
89105 if (! isInteractive) {
90106 if (value.isEmpty) {
91107 if (startingOptions.isNotEmpty) {
@@ -94,6 +110,8 @@ List<String> getMultiOption(
94110 print ('Missing parameter $name is required.' );
95111 exit (1 );
96112 }
113+ } else {
114+ return value;
97115 }
98116 }
99117 if (value.any ((e) => ! options.contains (e))) {
@@ -103,7 +121,10 @@ List<String> getMultiOption(
103121 if (desc != null ) {
104122 stdout.write (ansi.darkGray.wrap ('\n $desc \u {1B}[1A\r ' ));
105123 }
106- value = cbx (message, options, startingOptions);
124+ final selectedOptions = value.isEmpty
125+ ? startingOptions
126+ : value;
127+ value = cbx (message, options, selectedOptions);
107128 if (desc != null ) {
108129 stdout.write ('\r\u {1B}[K' );
109130 }
0 commit comments