Skip to content

Commit dda4ef1

Browse files
committed
v5.31.0
1 parent 07f7ab7 commit dda4ef1

File tree

9 files changed

+247
-22
lines changed

9 files changed

+247
-22
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
## [5.31.0] - 2024-07-02
2+
3+
* Ability to create Forms using Metro. E.g. `metro make:form register`
4+
* New stub for creating Forms
5+
* Small refactor to model stub
6+
* Refactor `slate` command to `metro slate:publish`
7+
* New `metro slate:install` command to install the slate package and publish all the files
8+
19
## [5.30.0] - 2024-06-16
210

311
* Update stubs

example/pubspec.lock

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,22 @@ packages:
2525
url: "https://pub.dev"
2626
source: hosted
2727
version: "2.11.0"
28+
base58check:
29+
dependency: transitive
30+
description:
31+
name: base58check
32+
sha256: "6c300dfc33e598d2fe26319e13f6243fea81eaf8204cb4c6b69ef20a625319a5"
33+
url: "https://pub.dev"
34+
source: hosted
35+
version: "2.0.0"
36+
bech32:
37+
dependency: transitive
38+
description:
39+
name: bech32
40+
sha256: "156cbace936f7720c79a79d16a03efad343b1ef17106716e04b8b8e39f99f7f7"
41+
url: "https://pub.dev"
42+
source: hosted
43+
version: "0.2.2"
2844
boolean_selector:
2945
dependency: transitive
3046
description:
@@ -57,6 +73,22 @@ packages:
5773
url: "https://pub.dev"
5874
source: hosted
5975
version: "1.18.0"
76+
convert:
77+
dependency: transitive
78+
description:
79+
name: convert
80+
sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
81+
url: "https://pub.dev"
82+
source: hosted
83+
version: "3.1.1"
84+
crypto:
85+
dependency: transitive
86+
description:
87+
name: crypto
88+
sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
89+
url: "https://pub.dev"
90+
source: hosted
91+
version: "3.0.3"
6092
dart_console:
6193
dependency: transitive
6294
description:
@@ -65,6 +97,14 @@ packages:
6597
url: "https://pub.dev"
6698
source: hosted
6799
version: "4.1.0"
100+
date_field:
101+
dependency: transitive
102+
description:
103+
name: date_field
104+
sha256: "8643c8e5f2ee55b4b389fc567ee27186c5a63570f545b291d61f02ab6ca7981d"
105+
url: "https://pub.dev"
106+
source: hosted
107+
version: "5.2.1"
68108
dio:
69109
dependency: transitive
70110
description:
@@ -131,6 +171,14 @@ packages:
131171
description: flutter
132172
source: sdk
133173
version: "0.0.0"
174+
flutter_multi_formatter:
175+
dependency: transitive
176+
description:
177+
name: flutter_multi_formatter
178+
sha256: "3495dc0056c96e467039a05bd184a5285c271a0efb2024a7030c7e84ba828994"
179+
url: "https://pub.dev"
180+
source: hosted
181+
version: "2.12.8"
134182
flutter_secure_storage:
135183
dependency: transitive
136184
description:
@@ -291,15 +339,15 @@ packages:
291339
path: ".."
292340
relative: true
293341
source: path
294-
version: "5.30.0"
342+
version: "5.31.0"
295343
nylo_support:
296344
dependency: transitive
297345
description:
298346
name: nylo_support
299-
sha256: "56d7f9f598715320a2ff95050b0d138b9bd0b108d3eb549160869ec64ac609ed"
347+
sha256: "8d070b707ebc12c31ee4f82b7e4c77a3eb578ffa66da4114788e83c244344444"
300348
url: "https://pub.dev"
301349
source: hosted
302-
version: "5.76.0"
350+
version: "5.77.0"
303351
page_transition:
304352
dependency: transitive
305353
description:
@@ -408,10 +456,10 @@ packages:
408456
dependency: transitive
409457
description:
410458
name: rxdart
411-
sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb"
459+
sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962"
412460
url: "https://pub.dev"
413461
source: hosted
414-
version: "0.27.7"
462+
version: "0.28.0"
415463
shared_preferences:
416464
dependency: transitive
417465
description:

lib/metro/menu.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@ All commands:
2222
make:api_service
2323
make:interceptor
2424
make:theme
25+
make:form
2526
make:route_guard
2627
make:config
2728
28-
publish
29-
publish:slate
29+
slate
30+
slate:publish
31+
slate:install
3032
""";

lib/metro/metro.dart

Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:args/args.dart';
77
import 'package:nylo_framework/cli_dialog/cli_dialog.dart';
88
import 'package:nylo_framework/json_dart_generator/dart_code_generator.dart';
99
import 'package:nylo_framework/metro/stubs/config_stub.dart';
10+
import 'package:nylo_framework/metro/stubs/form_stub.dart';
1011
import 'package:nylo_framework/metro/stubs/interceptor_stub.dart';
1112
import 'package:nylo_framework/metro/stubs/page_bottom_nav_stub.dart';
1213
import 'package:nylo_framework/metro/stubs/route_guard_stub.dart';
@@ -98,35 +99,66 @@ List<NyCommand> allCommands = [
9899
arguments: ["-h", "-f"],
99100
category: "make",
100101
action: _makeRouteGuard),
102+
NyCommand(
103+
name: "form",
104+
options: 1,
105+
arguments: ["-h", "-f"],
106+
category: "make",
107+
action: _makeForm),
101108
NyCommand(
102109
name: "config",
103110
options: 1,
104111
arguments: ["-h", "-f"],
105112
category: "make",
106113
action: _makeConfig),
107114
NyCommand(
108-
name: "slate",
115+
name: "install",
116+
options: 1,
117+
arguments: ["-h", "-f"],
118+
category: "slate",
119+
action: _installSlate),
120+
NyCommand(
121+
name: "publish",
109122
options: 1,
110123
arguments: ["-h", "-f"],
111-
category: "publish",
124+
category: "slate",
112125
action: _publishSlate),
113126
];
114127

115128
/// Publishes the contents from a Slate package into a Nylo project.
116-
/// E.g. run: `dart run nylo_framework:main publish:slate example_slate`
129+
/// E.g. run: `dart run nylo_framework:main slate:publish example_slate`
117130
_publishSlate(List<String> arguments) async {
118131
parser.addFlag(helpFlag,
119-
abbr: 'h', help: 'e.g. publish:slate example_slate', negatable: false);
132+
abbr: 'h', help: 'e.g. slate:publish example_slate', negatable: false);
133+
134+
final ArgResults argResults = parser.parse(arguments);
135+
136+
MetroService.hasHelpFlag(argResults[helpFlag], parser.usage);
137+
138+
MetroService.checkArguments(arguments,
139+
'You are missing the \'name\' of the slate package.\ne.g. slate:publish example_slate');
140+
141+
String slateName = argResults.arguments.first;
142+
143+
await MetroService.runProcess("dart run $slateName:main publish:all");
144+
}
145+
146+
/// Installs the contents from a Slate package into a Nylo project.
147+
/// E.g. run: `dart run nylo_framework:main slate:install example_slate`
148+
_installSlate(List<String> arguments) async {
149+
parser.addFlag(helpFlag,
150+
abbr: 'h', help: 'e.g. slate:install example_slate', negatable: false);
120151

121152
final ArgResults argResults = parser.parse(arguments);
122153

123154
MetroService.hasHelpFlag(argResults[helpFlag], parser.usage);
124155

125156
MetroService.checkArguments(arguments,
126-
'You are missing the \'name\' of the slate package.\ne.g. publish:slate example_slate');
157+
'You are missing the \'name\' of the slate package.\ne.g. slate:install example_slate');
127158

128159
String slateName = argResults.arguments.first;
129160

161+
await MetroService.runProcess("dart pub add $slateName");
130162
await MetroService.runProcess("dart run $slateName:main publish:all");
131163
}
132164

@@ -159,6 +191,35 @@ _makeConfig(List<String> arguments) async {
159191
forceCreate: hasForceFlag ?? false);
160192
}
161193

194+
/// Creates a config file for Nylo projects
195+
/// E.g. run: `dart run nylo_framework:main make:form register_form`
196+
_makeForm(List<String> arguments) async {
197+
parser.addFlag(helpFlag,
198+
abbr: 'h', help: 'e.g. make:form register_form', negatable: false);
199+
parser.addFlag(forceFlag,
200+
abbr: 'f',
201+
help: 'Creates a new form file even if it already exists.',
202+
negatable: false);
203+
204+
final ArgResults argResults = parser.parse(arguments);
205+
206+
bool? hasForceFlag = argResults[forceFlag];
207+
208+
MetroService.hasHelpFlag(argResults[helpFlag], parser.usage);
209+
210+
MetroService.checkArguments(arguments,
211+
'You are missing the \'name\' of the form you want to create.\ne.g. make:form login_form');
212+
213+
String formName =
214+
argResults.arguments.first.snakeCase.replaceAll(RegExp(r'(_?form)'), "");
215+
216+
ReCase classReCase = ReCase(formName);
217+
218+
String stubForm = formStub(classReCase);
219+
await MetroService.makeForm(classReCase.snakeCase, stubForm,
220+
forceCreate: hasForceFlag ?? false);
221+
}
222+
162223
/// Creates a Stateful Widget file for Nylo projects
163224
/// E.g. run: `dart run nylo_framework:main make:stateful_widget video_player_widget`
164225
_makeStatefulWidget(List<String> arguments) async {

lib/metro/stubs/form_stub.dart

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import 'package:recase/recase.dart';
2+
3+
/// This stub is used to create a new NyForm.
4+
String formStub(ReCase className) => '''
5+
import 'package:nylo_framework/nylo_framework.dart';
6+
7+
class ${className.pascalCase}Form extends NyFormData {
8+
9+
${className.pascalCase}Form({String? name}) : super(name ?? "${className.snakeCase}");
10+
11+
@override
12+
fields() => [
13+
Field("Name", value: "Customize your form ⚡️"),
14+
[
15+
Field("Price"),
16+
Field("Favourite Color", value: ["Red", "Blue", "Green"], selected: "Green"),
17+
],
18+
];
19+
20+
/// Cast the fields to their respective types
21+
/// All available types are below
22+
/// https://nylo.dev/docs/5.20.0/form#casts
23+
@override
24+
Map<String, dynamic> cast() => {
25+
"Name": FormCast(),
26+
"Price": FormCast.currency("usd"),
27+
"Favourite Color": FormCast.picker(),
28+
};
29+
30+
/// Validate the fields
31+
/// All available validations are below
32+
/// https://nylo.dev/docs/5.20.0/validation#validation-rules
33+
@override
34+
Map<String, dynamic> validate() => {
35+
"Name": FormValidator("not_empty|max:20"),
36+
"Price": FormValidator("not_empty"),
37+
"Favourite Color": FormValidator("not_empty"),
38+
};
39+
40+
/// Dummy data for the form
41+
/// This is used to populate the form with dummy data
42+
/// It will be removed when your .env file is set to production
43+
@override
44+
Map<String, dynamic> dummyData() => {
45+
// "Name": "John Doe",
46+
// "Price": 123.45,
47+
};
48+
49+
/// Style the TextFields
50+
/// This is used to style the fields
51+
/// Options: compact
52+
@override
53+
Map<String, dynamic> style() => {
54+
// "Name": "compact",
55+
// "Price": "compact",
56+
};
57+
}
58+
''';

lib/metro/stubs/model_stub.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
String modelStub({String? modelName}) => '''
33
import 'package:nylo_framework/nylo_framework.dart';
44
5-
/// $modelName Model.
6-
75
class $modelName extends Model {
86
$modelName();
97

lib/nylo_framework.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ export 'package:nylo_support/events/sync_auth_to_backpack.dart';
2626
export 'package:nylo_support/validation/ny_validator.dart';
2727
export 'package:nylo_support/validation/rules.dart';
2828
export 'package:nylo_support/widgets/ny_future_builder.dart';
29+
export 'package:nylo_support/widgets/ny_form.dart';
2930
export 'package:nylo_support/widgets/ny_rich_text.dart';
3031
export 'package:nylo_support/widgets/ny_text_field.dart';
32+
export 'package:nylo_support/widgets/fields/form_picker.dart';
3133
export 'package:nylo_support/router/models/nyrouter_route_guard.dart';
3234
export 'package:nylo_support/router/observers/ny_route_history_observer.dart';
3335
export 'package:nylo_support/nylo.dart';
@@ -43,8 +45,8 @@ export 'package:nylo_support/networking/ny_api_service.dart';
4345
export 'package:nylo_support/networking/ny_base_api_service.dart';
4446
export 'package:error_stack/error_stack.dart';
4547
export 'package:skeletonizer/skeletonizer.dart';
46-
export 'package:dio/dio.dart';
4748
export 'package:flutter_secure_storage/flutter_secure_storage.dart';
49+
export 'package:dio/dio.dart';
4850

4951
/// Nylo version
50-
const String nyloVersion = 'v5.30.0';
52+
const String nyloVersion = 'v5.31.0';

0 commit comments

Comments
 (0)