@@ -4,7 +4,8 @@ import 'dart:convert';
44import 'dart:io' ;
55
66import 'package:args/args.dart' ;
7- import 'package:nylo_framework/metro/stubs/custom_command_stub.dart' ;
7+ import '/metro/stubs/navigation_tab_state_journey.dart' ;
8+ import '/metro/stubs/custom_command_stub.dart' ;
89import '/cli_dialog/cli_dialog.dart' ;
910import '/json_dart_generator/dart_code_generator.dart' ;
1011import '/metro/stubs/config_stub.dart' ;
@@ -59,6 +60,12 @@ List<NyCommand> allCommands = [
5960 arguments: ["-h" , "-f" ],
6061 category: "make" ,
6162 action: _makeStatefulWidget),
63+ NyCommand (
64+ name: "journey_widget" ,
65+ options: 1 ,
66+ arguments: ["-h" , "-f" ],
67+ category: "make" ,
68+ action: _makeJourneyWidget),
6269 NyCommand (
6370 name: "stateless_widget" ,
6471 options: 1 ,
@@ -246,15 +253,101 @@ _makeStatefulWidget(List<String> arguments) async {
246253 MetroService .checkArguments (arguments,
247254 'You are missing the \' name\' of the stateful widget that you want to create.\n e.g. make:stateful_widget my_new_widget' );
248255
249- String widgetName = argResults.arguments.first.snakeCase
250- .replaceAll (RegExp (r'(_?widget)' ), "" );
256+ final String ? firstArgument = argResults.arguments.first;
257+ if (firstArgument? .contains ("," ) ?? false ) {
258+ List <String > argumentsList = firstArgument! .split ("," );
259+ for (var argument in argumentsList) {
260+ // create stateful widget for each argument
261+ String widgetName =
262+ argument.snakeCase.replaceAll (RegExp (r'(_?widget)' ), "" );
251263
252- ReCase classReCase = ReCase (widgetName);
264+ ReCase classReCase = ReCase (widgetName);
253265
254- String stubStatefulWidget = widgetStatefulStub (classReCase);
255- await MetroService .makeStatefulWidget (
256- classReCase.snakeCase, stubStatefulWidget,
257- forceCreate: hasForceFlag ?? false );
266+ String stubStatefulWidget = widgetStatefulStub (classReCase);
267+ await MetroService .makeStatefulWidget (
268+ classReCase.snakeCase, stubStatefulWidget,
269+ forceCreate: hasForceFlag ?? false );
270+ }
271+ } else {
272+ // create stateful widget for the first argument
273+ String widgetName =
274+ firstArgument! .snakeCase.replaceAll (RegExp (r'(_?widget)' ), "" );
275+
276+ ReCase classReCase = ReCase (widgetName);
277+
278+ String stubStatefulWidget = widgetStatefulStub (classReCase);
279+ await MetroService .makeStatefulWidget (
280+ classReCase.snakeCase, stubStatefulWidget,
281+ forceCreate: hasForceFlag ?? false );
282+ }
283+ }
284+
285+ /// Creates a Journey Widget file for Nylo projects
286+ /// E.g. run: `dart run nylo_framework:main make:journey_widget welcome_tab,users_dob,users_info --parent=Onboarding`
287+ _makeJourneyWidget (List <String > arguments) async {
288+ parser.addFlag (helpFlag,
289+ abbr: 'h' ,
290+ help: 'e.g. make:journey_widget welcome_tab,users_dob,users_info' ,
291+ negatable: false );
292+ parser.addFlag (forceFlag,
293+ abbr: 'f' ,
294+ help: 'Creates a new journey widget even if it already exists.' ,
295+ negatable: false );
296+ parser.addOption (parentOption,
297+ abbr: 'p' , help: 'The parent navigation hub for the journey widget.' );
298+
299+ final ArgResults argResults = parser.parse (arguments);
300+
301+ bool ? hasForceFlag = argResults[forceFlag];
302+ String ? parentNavigationHub = argResults[parentOption];
303+
304+ if (parentNavigationHub == null ) {
305+ MetroConsole .writeInRed (
306+ "You must provide a parent navigation hub for the journey widget.\n e.g. make:journey_widget welcome_tab --parent=Onboarding" );
307+ exit (1 );
308+ }
309+
310+ ReCase parentReCase = ReCase (parentNavigationHub);
311+ // remove NavigationHub if it exists
312+ if (parentReCase.snakeCase.contains ("navigation_hub" )) {
313+ parentReCase = ReCase (
314+ parentReCase.snakeCase.replaceAll (RegExp (r'(_?navigation_hub)' ), "" ));
315+ }
316+
317+ MetroService .hasHelpFlag (argResults[helpFlag], parser.usage);
318+
319+ MetroService .checkArguments (arguments,
320+ 'You are missing the \' name\' of the journey widget that you want to create.\n e.g. make:journey_widget my_new_widget' );
321+
322+ final String ? firstArgument = argResults.arguments.first;
323+ if (firstArgument? .contains ("," ) ?? false ) {
324+ List <String > argumentsList = firstArgument! .split ("," );
325+ for (var argument in argumentsList) {
326+ // create journey widget for each argument
327+ String widgetName =
328+ argument.snakeCase.replaceAll (RegExp (r'(_?widget)' ), "" );
329+
330+ ReCase classReCase = ReCase (widgetName);
331+
332+ String stubStatefulWidget = navigationTabJourneyStateStub (classReCase,
333+ parentNavigationHub: parentReCase);
334+ await MetroService .makeJourneyWidget (
335+ classReCase.snakeCase, stubStatefulWidget,
336+ forceCreate: hasForceFlag ?? false );
337+ }
338+ } else {
339+ // create journey widget for the first argument
340+ String widgetName =
341+ firstArgument! .snakeCase.replaceAll (RegExp (r'(_?widget)' ), "" );
342+
343+ ReCase classReCase = ReCase (widgetName);
344+
345+ String stubStatefulWidget = navigationTabJourneyStateStub (classReCase,
346+ parentNavigationHub: parentReCase);
347+ await MetroService .makeJourneyWidget (
348+ classReCase.snakeCase, stubStatefulWidget,
349+ forceCreate: hasForceFlag ?? false );
350+ }
258351}
259352
260353/// Creates a State Managed Widget file for Nylo projects
@@ -338,14 +431,33 @@ _makeStatelessWidget(List<String> arguments) async {
338431 MetroService .checkArguments (arguments,
339432 'You are missing the \' name\' of the widget that you want to create.\n e.g. make:stateless_widget my_new_widget' );
340433
341- String widgetName = argResults.arguments.first.snakeCase
342- .replaceAll (RegExp (r'(_?widget)' ), "" );
343- ReCase classReCase = ReCase (widgetName);
434+ final String ? firstArgument = argResults.arguments.first;
435+ if (firstArgument? .contains ("," ) ?? false ) {
436+ List <String > argumentsList = firstArgument! .split ("," );
437+ for (var argument in argumentsList) {
438+ // create stateless widget for each argument
439+ String widgetName =
440+ argument.snakeCase.replaceAll (RegExp (r'(_?widget)' ), "" );
344441
345- String stubStatelessWidget = widgetStatelessStub (classReCase);
346- await MetroService .makeStatelessWidget (
347- classReCase.snakeCase, stubStatelessWidget,
348- forceCreate: hasForceFlag ?? false );
442+ ReCase classReCase = ReCase (widgetName);
443+
444+ String stubStatelessWidget = widgetStatelessStub (classReCase);
445+ await MetroService .makeStatelessWidget (
446+ classReCase.snakeCase, stubStatelessWidget,
447+ forceCreate: hasForceFlag ?? false );
448+ }
449+ } else {
450+ // create stateless widget for the first argument
451+ String widgetName =
452+ firstArgument! .snakeCase.replaceAll (RegExp (r'(_?widget)' ), "" );
453+
454+ ReCase classReCase = ReCase (widgetName);
455+
456+ String stubStatelessWidget = widgetStatelessStub (classReCase);
457+ await MetroService .makeStatelessWidget (
458+ classReCase.snakeCase, stubStatelessWidget,
459+ forceCreate: hasForceFlag ?? false );
460+ }
349461}
350462
351463/// Creates a Route Guard for Nylo projects
0 commit comments