@@ -3,6 +3,9 @@ library metro;
33import 'package:collection/collection.dart' show IterableExtension;
44import 'package:args/args.dart' ;
55import 'package:nylo_framework/metro/menu.dart' ;
6+ import 'package:nylo_framework/metro/stubs/api_service_stub.dart' ;
7+ import 'package:nylo_framework/metro/stubs/event_stub.dart' ;
8+ import 'package:nylo_framework/metro/stubs/provider_stub.dart' ;
69import 'package:nylo_framework/metro/stubs/theme_colors_stub.dart' ;
710import 'package:nylo_framework/metro/stubs/theme_stub.dart' ;
811import 'package:nylo_support/metro/constants/strings.dart' ;
@@ -21,12 +24,6 @@ import 'package:recase/recase.dart';
2124
2225final ArgParser parser = ArgParser (allowTrailingOptions: true );
2326List <NyCommand > _allCommands = [
24- NyCommand (
25- name: "init" ,
26- options: 1 ,
27- arguments: ["-h" ],
28- category: "project" ,
29- action: _projectInit),
3027 NyCommand (
3128 name: "controller" ,
3229 options: 1 ,
@@ -57,6 +54,24 @@ List<NyCommand> _allCommands = [
5754 arguments: ["-h" , "-f" ],
5855 category: "make" ,
5956 action: _makeStatelessWidget),
57+ NyCommand (
58+ name: "provider" ,
59+ options: 1 ,
60+ arguments: ["-h" , "-f" ],
61+ category: "make" ,
62+ action: _makeProvider),
63+ NyCommand (
64+ name: "event" ,
65+ options: 1 ,
66+ arguments: ["-h" , "-f" ],
67+ category: "make" ,
68+ action: _makeEvent),
69+ NyCommand (
70+ name: "api_service" ,
71+ options: 1 ,
72+ arguments: ["-h" , "-f" , "-model" , "-resource" ],
73+ category: "make" ,
74+ action: _makeApiService),
6075 NyCommand (
6176 name: "theme" ,
6277 options: 1 ,
@@ -93,32 +108,14 @@ Future<void> commands(List<String> arguments) async {
93108 await nyCommand.action !(arguments);
94109}
95110
96- _projectInit (List <String > arguments) async {
97- parser.addFlag (helpFlag,
98- abbr: 'h' , help: 'Initializes the Nylo project' , negatable: false );
99-
100- final ArgResults argResults = parser.parse (arguments);
101-
102- _checkHelpFlag (argResults[helpFlag], parser.usage);
103-
104- if (await MetroService .hasFile (".env" ) == false ) {
105- final File envExample = File ('.env-example' );
106- final File env = File ('.env' );
107- await env.writeAsString (await envExample.readAsString ());
108- MetroConsole .writeInGreen ('.env file add from .env-example 🎉' );
109- }
110-
111- MetroConsole .writeInGreen ('Project initialized, create something great 🎉' );
112- }
113-
114111_makeStatefulWidget (List <String > arguments) async {
115112 parser.addFlag (helpFlag,
116113 abbr: 'h' ,
117- help: 'e.g. make:widget video_player_widget' ,
114+ help: 'e.g. make:stateful_widget video_player_widget' ,
118115 negatable: false );
119116 parser.addFlag (forceFlag,
120117 abbr: 'f' ,
121- help: 'Creates a new widget even if it already exists.' ,
118+ help: 'Creates a new stateful widget even if it already exists.' ,
122119 negatable: false );
123120
124121 final ArgResults argResults = parser.parse (arguments);
@@ -127,6 +124,9 @@ _makeStatefulWidget(List<String> arguments) async {
127124
128125 _checkHelpFlag (argResults[helpFlag], parser.usage);
129126
127+ _checkArguments (arguments,
128+ 'You are missing the \' name\' of the stateful widget that you want to create.\n e.g. make:stateful_widget my_new_widget' );
129+
130130 String widgetName =
131131 argResults.arguments.first.replaceAll (RegExp (r'(_?widget)' ), "" );
132132
@@ -140,11 +140,11 @@ _makeStatefulWidget(List<String> arguments) async {
140140_makeStatelessWidget (List <String > arguments) async {
141141 parser.addFlag (helpFlag,
142142 abbr: 'h' ,
143- help: 'e.g. make:widget video_player_widget' ,
143+ help: 'e.g. make:stateless_widget video_player_widget' ,
144144 negatable: false );
145145 parser.addFlag (forceFlag,
146146 abbr: 'f' ,
147- help: 'Creates a new widget even if it already exists.' ,
147+ help: 'Creates a new stateless widget even if it already exists.' ,
148148 negatable: false );
149149
150150 final ArgResults argResults = parser.parse (arguments);
@@ -166,6 +166,114 @@ _makeStatelessWidget(List<String> arguments) async {
166166 MetroConsole .writeInGreen (widgetName + ' created 🎉' );
167167}
168168
169+ _makeProvider (List <String > arguments) async {
170+ parser.addFlag (helpFlag,
171+ abbr: 'h' , help: 'e.g. make:provider storage_provider' , negatable: false );
172+ parser.addFlag (forceFlag,
173+ abbr: 'f' ,
174+ help: 'Creates a new provider even if it already exists.' ,
175+ negatable: false );
176+
177+ final ArgResults argResults = parser.parse (arguments);
178+
179+ bool ? hasForceFlag = argResults[forceFlag];
180+
181+ _checkHelpFlag (argResults[helpFlag], parser.usage);
182+
183+ _checkArguments (arguments,
184+ 'You are missing the \' name\' of the provider that you want to create.\n e.g. make:provider cache_provider' );
185+
186+ String providerName =
187+ argResults.arguments.first.replaceAll (RegExp (r'(_?provider)' ), "" );
188+
189+ String stubProvider = providerStub (ReCase (providerName));
190+ await MetroService .makeProvider (providerName, stubProvider,
191+ forceCreate: hasForceFlag ?? false );
192+
193+ MetroConsole .writeInGreen (providerName + '_provider created 🎉' );
194+ }
195+
196+ _makeEvent (List <String > arguments) async {
197+ parser.addFlag (helpFlag,
198+ abbr: 'h' , help: 'e.g. make:event login_event' , negatable: false );
199+ parser.addFlag (forceFlag,
200+ abbr: 'f' ,
201+ help: 'Creates a new event even if it already exists.' ,
202+ negatable: false );
203+
204+ final ArgResults argResults = parser.parse (arguments);
205+
206+ bool ? hasForceFlag = argResults[forceFlag];
207+
208+ _checkHelpFlag (argResults[helpFlag], parser.usage);
209+
210+ _checkArguments (arguments,
211+ 'You are missing the \' name\' of the event that you want to create.\n e.g. make:event login_event' );
212+
213+ String eventName =
214+ argResults.arguments.first.replaceAll (RegExp (r'(_?event)' ), "" );
215+
216+ String stubEvent = eventStub (eventName: ReCase (eventName));
217+ await MetroService .makeEvent (eventName, stubEvent,
218+ forceCreate: hasForceFlag ?? false );
219+
220+ MetroConsole .writeInGreen (eventName + '_event created 🎉' );
221+ }
222+
223+ _makeApiService (List <String > arguments) async {
224+ parser.addFlag (helpFlag,
225+ abbr: 'h' ,
226+ help: 'e.g. make:api_service user_api_service' ,
227+ negatable: false );
228+ parser.addFlag (forceFlag,
229+ abbr: 'f' ,
230+ help: 'Creates a new API service even if it already exists.' ,
231+ negatable: false );
232+ parser.addOption (
233+ modelFlag,
234+ abbr: 'm' ,
235+ help: 'Provide the Model that should be used in the API service.' ,
236+ );
237+ parser.addOption (
238+ urlFlag,
239+ abbr: 'u' ,
240+ help: 'Provide the Base Url that should be used in the API service.' ,
241+ );
242+ parser.addFlag (isResourceFlag,
243+ abbr: 'r' ,
244+ help: 'Creates a API service with crud methods' ,
245+ negatable: false );
246+
247+ final ArgResults argResults = parser.parse (arguments);
248+
249+ bool ? hasForceFlag = argResults[forceFlag];
250+ bool hasResourceFlag = argResults[isResourceFlag] ?? false ;
251+ String modelFlagValue = argResults[modelFlag] ?? "Model" ;
252+ String ? baseUrlFlagValue = argResults[urlFlag];
253+ if (baseUrlFlagValue == null ) {
254+ baseUrlFlagValue = "getEnv('API_BASE_URL')" ;
255+ } else {
256+ baseUrlFlagValue = "\" $baseUrlFlagValue \" " ;
257+ }
258+
259+ _checkHelpFlag (argResults[helpFlag], parser.usage);
260+
261+ _checkArguments (arguments,
262+ 'You are missing the \' name\' of the API service that you want to create.\n e.g. make:api_service user_api_service' );
263+
264+ String apiServiceName =
265+ argResults.arguments.first.replaceAll (RegExp (r'(_?api_service)' ), "" );
266+
267+ String stubApiService = apiServiceStub (ReCase (apiServiceName),
268+ model: ReCase (modelFlagValue),
269+ isResource: hasResourceFlag,
270+ baseUrl: baseUrlFlagValue);
271+ await MetroService .makeApiService (apiServiceName, stubApiService,
272+ forceCreate: hasForceFlag ?? false );
273+
274+ MetroConsole .writeInGreen (apiServiceName + '_api_service created 🎉' );
275+ }
276+
169277_makeTheme (List <String > arguments) async {
170278 parser.addFlag (helpFlag,
171279 abbr: 'h' , help: 'e.g. make:theme bright_theme' , negatable: false );
@@ -231,7 +339,8 @@ _makeController(List<String> arguments) async {
231339_makeModel (List <String > arguments) async {
232340 parser.addFlag (helpFlag,
233341 abbr: 'h' ,
234- help: 'Creates a new model in your project.' ,
342+ help:
343+ 'To create a new model, use e.g. "flutter pub run nylo_framework:main make:model user"' ,
235344 negatable: false );
236345 parser.addFlag (forceFlag,
237346 abbr: 'f' ,
0 commit comments