flu-cli 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "InkWell": {
3
- "prefix": "ik",
3
+ "prefix": "ikw",
4
4
  "body": [
5
5
  "InkWell(",
6
6
  "\tonTap: () {",
@@ -11,136 +11,94 @@
11
11
  ]
12
12
  },
13
13
  "by": {
14
- "prefix": "by",
14
+ "prefix": "bdy",
15
15
  "body": [
16
16
  "Widget body = Container();",
17
17
  "return body;",
18
18
  ]
19
19
  },
20
- "状态页 分层模版": {
21
- "prefix": "stLay",
22
- "description": "Flutter StatefulWidget 分层结构框架",
23
- "body": [
24
- "\t// ------------------------------",
25
- "\t// 2. 内部状态(仅组件自身需要的临时状态)",
26
- "\t// ------------------------------",
27
- "",
28
- "\t// ------------------------------",
29
- "\t// 3. 状态更新方法(仅处理内部状态)",
30
- "\t// ------------------------------",
31
- "",
32
- "\t// ------------------------------",
33
- "\t// 4. UI构建(核心:根据参数和内部状态渲染)",
34
- "\t// ------------------------------",
35
- "\t@override",
36
- "\tWidget build(BuildContext context) {",
37
- "\t\tfinal Widget body = _buildBody();",
38
- "\t\treturn body;",
39
- "\t}",
40
- "",
41
- "\t// 主体布局",
42
- "\tWidget _buildBody() {",
43
- "\t\tfinal Widget body = Container();",
44
- "\t\treturn body;",
45
- "\t}",
46
- "",
47
- "\t// ------------------------------",
48
- "\t// 5. 事件处理(内部交互+转发外部回调)",
49
- "\t// ------------------------------",
50
- "",
51
- "\t// ------------------------------",
52
- "\t// 6. 辅助方法(UI计算、数据转换等)",
53
- "\t// ------------------------------",
54
- "",
55
- "\t// ------------------------------",
56
- "\t// 7. 生命周期方法(仅必要时使用)",
57
- "\t// ------------------------------",
58
- "",
59
- "\t// ------------------------------",
60
- "\t// 8. 资源释放",
61
- "\t// ------------------------------",
62
- "\t@override",
63
- "\tvoid dispose() {",
64
- "\t\tsuper.dispose();",
65
- "\t}"
66
- ]
67
- },
68
- "无状态 分层模版": {
69
- "prefix": "lessLay",
70
- "description": "Flutter StatelessWidget 分层结构框架",
71
- "body": [
72
- "",
73
- "\t// ------------------------------",
74
- "\t// 2. UI构建(核心:根据参数渲染)",
75
- "\t// ------------------------------",
76
- "\t@override",
77
- "\tWidget build(BuildContext context) {",
78
- "\t\tfinal Widget body = _buildBody();",
79
- "\t\treturn body;",
80
- "\t}",
81
- "\t// 主容器(拆分UI结构)",
82
- "\tWidget _buildBody() {",
83
- "\t\tfinal Widget body = Container();",
84
- "\t\treturn body;",
85
- "\t}",
86
- "",
87
- "\t// ------------------------------",
88
- "\t// 3. 辅助方法(UI计算/转换)",
89
- "\t// ------------------------------",
90
- "",
91
- ]
92
- },
93
20
  "flu.stPage": {
94
21
  "prefix": "stPage",
95
22
  "description": "Stateful 页面(使用 BasePage)",
96
23
  "body": [
97
24
  "import 'package:flutter/material.dart';",
98
25
  "import '../base/base_page.dart';",
99
- "import '{{vm_import}}';",
26
+ "import '../viewmodels/${2:${1/(.*)/${1:/downcase}/}_viewmodel}.dart';",
100
27
  "",
101
- "class {{Name}}Page extends BasePage<{{Name}}ViewModel> {",
102
- " const {{Name}}Page({super.key});",
28
+ "class ${1:Name}Page extends BasePage<${1:Name}ViewModel> {",
29
+ " const ${1:Name}Page({super.key});",
103
30
  "",
104
31
  " @override",
105
- " State<{{Name}}Page> createState() => _{{Name}}PageState();",
32
+ " State<${1:Name}Page> createState() => _${1:Name}PageState();",
106
33
  "}",
107
34
  "",
108
- "class _{{Name}}PageState extends BasePageState<{{Name}}ViewModel, {{Name}}Page> {",
109
- " // ==================== UI 配置 ====================",
35
+ "class _${1:Name}PageState extends BasePageState<${1:Name}ViewModel, ${1:Name}Page> {",
36
+ " // 1. UI 配置",
110
37
  " @override",
111
- " String get title => '{{title}}';",
38
+ " String get title => '${3:Title}';",
112
39
  "",
113
- " // ==================== ViewModel ====================",
40
+ " // 2. ViewModel",
114
41
  " @override",
115
- " {{Name}}ViewModel createViewModel() => {{Name}}ViewModel();",
42
+ " ${1:Name}ViewModel createViewModel() => ${1:Name}ViewModel();",
116
43
  "",
117
- " // ==================== UI 构建 ====================",
44
+ " // 3. UI 构建",
118
45
  " @override",
119
46
  " Widget buildContent(BuildContext context) {",
120
47
  " return Center(",
121
- " child: Text('{{Name}} Page'),",
48
+ " child: Text('${1:Name} Page'),",
122
49
  " );",
123
50
  " }",
124
51
  "}",
125
52
  ""
126
53
  ]
127
54
  },
55
+ "flu.stSimplePage": {
56
+ "prefix": "stSimplePage",
57
+ "description": "Stateful 简单页面 (无 BasePage)",
58
+ "body": [
59
+ "import 'package:flutter/material.dart';",
60
+ "",
61
+ "class ${1:Name}Page extends StatefulWidget {",
62
+ " const ${1:Name}Page({super.key});",
63
+ "",
64
+ " @override",
65
+ " State<${1:Name}Page> createState() => _${1:Name}PageState();",
66
+ "}",
67
+ "",
68
+ "class _${1:Name}PageState extends State<${1:Name}Page> {",
69
+ " // 1. 状态定义",
70
+ "",
71
+ " // 2. UI 构建",
72
+ " @override",
73
+ " Widget build(BuildContext context) {",
74
+ " final appBar = _buildAppBar(context);",
75
+ " final body = _buildBody(context);",
76
+ " return Scaffold(appBar: appBar, body: body);",
77
+ " }",
78
+ "",
79
+ " Widget _buildBody(BuildContext context) {",
80
+ " return const Center(child: Text('${1:Name} Page'));",
81
+ " }",
82
+ "",
83
+ " AppBar _buildAppBar(BuildContext context) {",
84
+ " return AppBar(title: const Text('${1:Name}'));",
85
+ " }",
86
+ "}",
87
+ ""
88
+ ]
89
+ },
128
90
  "flu.lessPage": {
129
91
  "prefix": "lessPage",
130
92
  "description": "Stateless 页面(三段分层 + 增量包裹)",
131
93
  "body": [
132
94
  "import 'package:flutter/material.dart';",
133
95
  "",
134
- "class {{Name}}Page extends StatelessWidget {",
135
- " // ------------------------------",
136
- " // 1. 外部配置参数(构造函数)",
137
- " // ------------------------------",
96
+ "class ${1:Name}Page extends StatelessWidget {",
97
+ " // 1. 参数与配置",
138
98
  " /// 构造函数",
139
- " const {{Name}}Page({super.key});",
99
+ " const ${1:Name}Page({super.key});",
140
100
  "",
141
- " // ------------------------------",
142
- " // 2. UI构建(核心:根据参数渲染)",
143
- " // ------------------------------",
101
+ " // 2. UI 构建",
144
102
  " @override",
145
103
  " Widget build(BuildContext context) {",
146
104
  " final appBar = _buildAppBar(context);",
@@ -156,12 +114,10 @@
156
114
  " }",
157
115
  "",
158
116
  " AppBar _buildAppBar(BuildContext context) {",
159
- " return AppBar(title: const Text('{{title}}'));",
117
+ " return AppBar(title: const Text('${2:Title}'));",
160
118
  " }",
161
119
  "",
162
- " // ------------------------------",
163
- " // 3. 辅助方法(UI计算/转换)",
164
- " // ------------------------------",
120
+ " // 3. 辅助方法",
165
121
  " String _formatTitle(String text) => text;",
166
122
  "}",
167
123
  ""
@@ -169,60 +125,22 @@
169
125
  },
170
126
  "flu.stWidget": {
171
127
  "prefix": "stWidget",
172
- "description": "Stateful 组件(七段分层 + 增量包裹)",
128
+ "description": "Stateful 组件(四段分层 + 增量包裹)",
173
129
  "body": [
174
130
  "import 'package:flutter/material.dart';",
175
131
  "",
176
- "class {{Name}}Widget extends StatefulWidget {",
177
- " // ------------------------------",
178
- " // 1. 外部配置参数(构造函数)",
179
- " // ------------------------------",
132
+ "class ${1:Name}Widget extends StatefulWidget {",
180
133
  " /// 构造函数",
181
- " const {{Name}}Widget({super.key});",
134
+ " const ${1:Name}Widget({super.key});",
182
135
  "",
183
136
  " @override",
184
- " State<{{Name}}Widget> createState() => _{{Name}}WidgetState();",
137
+ " State<${1:Name}Widget> createState() => _${1:Name}WidgetState();",
185
138
  "}",
186
139
  "",
187
- "class _{{Name}}WidgetState extends State<{{Name}}Widget> {",
188
- " // ------------------------------",
189
- " // 2. 内部状态(仅组件自身需要的临时状态)",
190
- " // ------------------------------",
191
- " int _count = 0;",
140
+ "class _${1:Name}WidgetState extends State<${1:Name}Widget> {",
141
+ " // 1. 状态定义",
192
142
  "",
193
- " // ------------------------------",
194
- " // 3. 状态更新方法(仅处理内部状态)",
195
- " // ------------------------------",
196
- " void _inc() { setState(() { _count++; }); }",
197
- "",
198
- " // ------------------------------",
199
- " // 4. UI构建(核心:根据参数和内部状态渲染)",
200
- " // ------------------------------",
201
- " @override",
202
- " Widget build(BuildContext context) {",
203
- " Widget w = Text('count: ' + _count.toString());",
204
- " w = Padding(padding: const EdgeInsets.all(12), child: w);",
205
- " return w;",
206
- " }",
207
- "",
208
- " // ------------------------------",
209
- " // 5. 事件处理(内部交互+转发外部回调)",
210
- " // ------------------------------",
211
- " void _onPressed() { _inc(); }",
212
- "",
213
- " // ------------------------------",
214
- " // 5.2 转发外部回调(如点击事件)",
215
- " // ------------------------------",
216
- " void _emitPressed() { /* TODO */ }",
217
- "",
218
- " // ------------------------------",
219
- " // 6. 辅助方法(UI计算、数据转换等)",
220
- " // ------------------------------",
221
- " String _format(String s) => s;",
222
- "",
223
- " // ------------------------------",
224
- " // 7. 生命周期方法(仅必要时使用)",
225
- " // ------------------------------",
143
+ " // 2. 生命周期",
226
144
  " @override",
227
145
  " void initState() {",
228
146
  " super.initState();",
@@ -232,6 +150,24 @@
232
150
  " void dispose() {",
233
151
  " super.dispose();",
234
152
  " }",
153
+ "",
154
+ " // 3. UI 构建",
155
+ " @override",
156
+ " Widget build(BuildContext context) {",
157
+ " Widget w = _buildBody();",
158
+ " return w;",
159
+ " }",
160
+ "",
161
+ " // section: Body",
162
+ " Widget _buildBody() {",
163
+ " Widget w = const SizedBox.shrink();",
164
+ " w = Padding(padding: const EdgeInsets.all(12), child: w);",
165
+ " return w;",
166
+ " }",
167
+ "",
168
+ " // 4. 事件与逻辑",
169
+ "",
170
+ " String _format(String s) => s;",
235
171
  "}",
236
172
  ""
237
173
  ]
@@ -242,57 +178,85 @@
242
178
  "body": [
243
179
  "import 'package:flutter/material.dart';",
244
180
  "",
245
- "class {{Name}}Widget extends StatelessWidget {",
246
- " // ------------------------------",
247
- " // 1. 外部配置参数(构造函数)",
248
- " // ------------------------------",
181
+ "class ${1:Name}Widget extends StatelessWidget {",
249
182
  " /// 构造函数",
250
- " const {{Name}}Widget({super.key});",
183
+ " const ${1:Name}Widget({super.key});",
251
184
  "",
252
- " // ------------------------------",
253
- " // 2. UI构建(核心:根据参数渲染)",
254
- " // ------------------------------",
185
+ " // 1. UI 构建",
255
186
  " @override",
256
187
  " Widget build(BuildContext context) {",
188
+ " Widget w = _buildBody();",
189
+ " return w;",
190
+ " }",
191
+ "",
192
+ " // section: Body",
193
+ " Widget _buildBody() {",
257
194
  " Widget w = const SizedBox.shrink();",
258
195
  " w = Padding(padding: const EdgeInsets.all(12), child: w);",
259
196
  " return w;",
260
197
  " }",
261
198
  "",
262
- " // ------------------------------",
263
- " // 3. 辅助方法(UI计算/转换)",
264
- " // ------------------------------",
199
+ " // 2. 辅助方法",
265
200
  " String _format(String s) => s;",
266
201
  "}",
267
202
  ""
268
203
  ]
269
204
  },
205
+ "flu.stComponent": {
206
+ "prefix": "stComponent",
207
+ "description": "Stateful 通用组件",
208
+ "body": [
209
+ "import 'package:flutter/material.dart';",
210
+ "",
211
+ "class ${1:Name}Component extends StatefulWidget {",
212
+ " const ${1:Name}Component({super.key});",
213
+ "",
214
+ " @override",
215
+ " State<${1:Name}Component> createState() => _${1:Name}ComponentState();",
216
+ "}",
217
+ "",
218
+ "class _${1:Name}ComponentState extends State<${1:Name}Component> {",
219
+ " // 1. 状态定义",
220
+ "",
221
+ " // 2. UI 构建",
222
+ " @override",
223
+ " Widget build(BuildContext context) {",
224
+ " Widget w = _buildBody(context);",
225
+ " return w;",
226
+ " }",
227
+ "",
228
+ " Widget _buildBody(BuildContext context) {",
229
+ " Widget w = const Text('${1:Name}Component');",
230
+ " w = Container(padding: const EdgeInsets.all(16), child: w);",
231
+ " return w;",
232
+ " }",
233
+ "}",
234
+ ""
235
+ ]
236
+ },
270
237
  "flu.component": {
271
238
  "prefix": "component",
272
239
  "description": "通用组件(模块内或共享)",
273
240
  "body": [
274
241
  "import 'package:flutter/material.dart';",
275
242
  "",
276
- "class {{Name}}Component extends StatelessWidget {",
243
+ "class ${1:Name}Component extends StatelessWidget {",
244
+ " // 1. 参数与配置",
277
245
  " /// 构造函数",
278
- " const {{Name}}Component({super.key});",
246
+ " const ${1:Name}Component({super.key});",
279
247
  "",
248
+ " // 2. UI 构建",
280
249
  " @override",
281
250
  " Widget build(BuildContext context) {",
282
- " return Container(",
283
- " padding: const EdgeInsets.all(16),",
284
- " child: Column(",
285
- " crossAxisAlignment: CrossAxisAlignment.start,",
286
- " children: [",
287
- " Text(",
288
- " '{{Name}}Component',",
289
- " style: Theme.of(context).textTheme.titleLarge,",
290
- " ),",
291
- " const SizedBox(height: 8),",
292
- " const Text('Component content goes here'),",
293
- " ],",
294
- " ),",
295
- " );",
251
+ " Widget w = _buildBody(context);",
252
+ " return w;",
253
+ " }",
254
+ "",
255
+ " // 3. 内部实现",
256
+ " Widget _buildBody(BuildContext context) {",
257
+ " Widget w = const Text('${1:Name}Component');",
258
+ " w = Container(padding: const EdgeInsets.all(16), child: w);",
259
+ " return w;",
296
260
  " }",
297
261
  "}",
298
262
  ""
@@ -304,16 +268,15 @@
304
268
  "body": [
305
269
  "import '../base/base_viewmodel.dart';",
306
270
  "",
307
- "class {{Name}}ViewModel extends BaseViewModel {",
308
- " /// 初始化",
271
+ "class ${1:Name}ViewModel extends BaseViewModel {",
272
+ " // 1. 初始化",
309
273
  " @override",
310
274
  " Future<void> onInit() async {",
311
275
  " await super.onInit();",
312
276
  " // TODO: 初始化逻辑",
313
277
  " }",
314
278
  "",
315
- " /// 刷新数据",
316
- " @override",
279
+ " // 2. 公共方法",
317
280
  " Future<void> refreshData() async {",
318
281
  " // TODO: 刷新逻辑",
319
282
  " }",
@@ -321,81 +284,16 @@
321
284
  ""
322
285
  ]
323
286
  },
324
- "flu.service.api": {
325
- "prefix": "apiService",
326
- "description": "API Service(http 示例)",
327
- "body": [
328
- "import 'dart:convert';",
329
- "import 'package:http/http.dart' as http;",
330
- "",
331
- "class {{Name}}Service {",
332
- " final String baseUrl = 'https://api.example.com';",
333
- "",
334
- " Future<Map<String, dynamic>> getData(String id) async {",
335
- " try {",
336
- " final response = await http.get(",
337
- " Uri.parse('$baseUrl/{{snake_name}}/$id'),",
338
- " headers: {'Content-Type': 'application/json'},",
339
- " );",
340
- " if (response.statusCode == 200) {",
341
- " return json.decode(response.body);",
342
- " } else {",
343
- " throw Exception('Failed: ${response.statusCode}');",
344
- " }",
345
- " } catch (e) {",
346
- " throw Exception('Network error: ' + e.toString());",
347
- " }",
348
- " }",
349
- "}",
350
- ""
351
- ]
352
- },
353
- "flu.service.auth": {
354
- "prefix": "authService",
355
- "description": "Auth Service(登录/登出示例)",
356
- "body": [
357
- "import 'dart:convert';",
358
- "import 'package:http/http.dart' as http;",
359
- "import 'package:shared_preferences/shared_preferences.dart';",
360
- "",
361
- "class {{Name}}Service {",
362
- " final String baseUrl = 'https://api.example.com';",
363
- " static const String _tokenKey = 'auth_token';",
364
- "",
365
- " Future<Map<String, dynamic>> login(String username, String password) async {",
366
- " try {",
367
- " final response = await http.post(",
368
- " Uri.parse('$baseUrl/auth/login'),",
369
- " headers: {'Content-Type': 'application/json'},",
370
- " body: json.encode({'username': username, 'password': password}),",
371
- " );",
372
- " if (response.statusCode == 200) {",
373
- " final data = json.decode(response.body);",
374
- " return data;",
375
- " } else {",
376
- " throw Exception('Login failed: ${response.statusCode}');",
377
- " }",
378
- " } catch (e) {",
379
- " throw Exception('Login error: ' + e.toString());",
380
- " }",
381
- " }",
382
- "}",
383
- ""
384
- ]
385
- },
386
- "flu.service.storage": {
387
- "prefix": "storageService",
388
- "description": "Storage Service(SharedPreferences 示例)",
287
+ "flu.service": {
288
+ "prefix": "service",
289
+ "description": "Generic Service",
389
290
  "body": [
390
- "import 'package:shared_preferences/shared_preferences.dart';",
391
- "import 'dart:convert';",
392
- "",
393
- "class {{Name}}Service {",
394
- " static const String _keyPrefix = '{{snake_name}}_';",
291
+ "class ${1:Name}Service {",
292
+ " // 1. 配置",
395
293
  "",
396
- " Future<bool> saveString(String key, String value) async {",
397
- " final prefs = await SharedPreferences.getInstance();",
398
- " return await prefs.setString(_keyPrefix + key, value);",
294
+ " // 2. 业务方法",
295
+ " Future<void> doSomething() async {",
296
+ " // TODO: implement",
399
297
  " }",
400
298
  "}",
401
299
  ""
@@ -405,19 +303,22 @@
405
303
  "prefix": "model",
406
304
  "description": "基础 Model(JSON 序列化)",
407
305
  "body": [
408
- "class {{Name}}Model {",
306
+ "class ${1:Name}Model {",
307
+ " // 1. 属性",
409
308
  " final String id;",
410
309
  " final String name;",
411
310
  " final DateTime createdAt;",
412
311
  "",
413
- " {{Name}}Model({",
312
+ " // 2. 构造函数",
313
+ " ${1:Name}Model({",
414
314
  " required this.id,",
415
315
  " required this.name,",
416
316
  " required this.createdAt,",
417
317
  " });",
418
318
  "",
419
- " factory {{Name}}Model.fromJson(Map<String, dynamic> json) {",
420
- " return {{Name}}Model(",
319
+ " // 3. 序列化",
320
+ " factory ${1:Name}Model.fromJson(Map<String, dynamic> json) {",
321
+ " return ${1:Name}Model(",
421
322
  " id: json['id'] as String,",
422
323
  " name: json['name'] as String,",
423
324
  " createdAt: DateTime.parse(json['created_at'] as String),",
@@ -441,25 +342,28 @@
441
342
  "body": [
442
343
  "import 'package:flutter/material.dart';",
443
344
  "import '../base/base_list_page.dart';",
444
- "import '{{vm_import}}';",
445
- "import '../models/{{snake_name}}_model.dart';",
345
+ "import '../viewmodels/${3:${1/(.*)/${1:/downcase}/}_viewmodel}.dart';",
346
+ "import '../models/${4:${2/(.*)/${1:/downcase}/}_model}.dart';",
446
347
  "",
447
- "class {{Name}}Page extends BaseListPage<{{ModelName}}, {{Name}}ViewModel> {",
448
- " const {{Name}}Page({super.key});",
348
+ "class ${1:Name}Page extends BaseListPage<${2:ModelName}, ${1:Name}ViewModel> {",
349
+ " const ${1:Name}Page({super.key});",
449
350
  "",
450
351
  " @override",
451
- " State<{{Name}}Page> createState() => _{{Name}}PageState();",
352
+ " State<${1:Name}Page> createState() => _${1:Name}PageState();",
452
353
  "}",
453
354
  "",
454
- "class _{{Name}}PageState extends BaseListPageState<{{ModelName}}, {{Name}}ViewModel, {{Name}}Page> {",
355
+ "class _${1:Name}PageState extends BaseListPageState<${2:ModelName}, ${1:Name}ViewModel, ${1:Name}Page> {",
356
+ " // 1. UI 配置",
455
357
  " @override",
456
- " String get title => '{{title}}';",
358
+ " String get title => '${5:Title}';",
457
359
  "",
360
+ " // 2. ViewModel",
458
361
  " @override",
459
- " {{Name}}ViewModel createViewModel() => {{Name}}ViewModel();",
362
+ " ${1:Name}ViewModel createViewModel() => ${1:Name}ViewModel();",
460
363
  "",
364
+ " // 3. UI 构建",
461
365
  " @override",
462
- " Widget buildItem(BuildContext context, {{ModelName}} item, int index) {",
366
+ " Widget buildItem(BuildContext context, ${2:ModelName} item, int index) {",
463
367
  " return ListTile(",
464
368
  " title: Text(item.toString()),",
465
369
  " );",
@@ -472,11 +376,12 @@
472
376
  "description": "List ViewModel (BaseListViewModel)",
473
377
  "body": [
474
378
  "import '../base/base_list_viewmodel.dart';",
475
- "import '../models/{{snake_name}}_model.dart';",
379
+ "import '../models/${2:${1/(.*)/${1:/downcase}/}_model}.dart';",
476
380
  "",
477
- "class {{Name}}ViewModel extends BaseListViewModel<{{ModelName}}> {",
381
+ "class ${1:Name}ViewModel extends BaseListViewModel<${2:${1:Name}Model}> {",
382
+ " // 1. 核心业务",
478
383
  " @override",
479
- " Future<List<{{ModelName}}>> fetchPage({required int page, required int pageSize}) async {",
384
+ " Future<List<${2:${1:Name}Model}>> fetchPage({required int page, required int pageSize}) async {",
480
385
  " // TODO: Load data from service",
481
386
  " await Future.delayed(const Duration(seconds: 1));",
482
387
  " return [];",
@@ -1,26 +0,0 @@
1
- // generate-sm 命令:为现有项目生成/切换状态管理器(依赖注入、入口与路由增强、适配器/变体生成)
2
- import chalk from 'chalk'
3
- import { existsSync } from 'fs'
4
- import { StateManagerGenerator } from '../generators/state_manager_generator.js'
5
- import { ProjectGenerator } from '../generators/project_generator.js'
6
-
7
- const SUPPORTED = ['default', 'provider', 'getx', 'riverpod']
8
-
9
- export async function generateStateManager (type, options) {
10
- try {
11
- const state = SUPPORTED.includes(type) ? type : 'default'
12
- const projectPath = options.dir || process.cwd()
13
- if (!existsSync(projectPath)) {
14
- console.log(chalk.red(`目录不存在: ${projectPath}`))
15
- process.exit(1)
16
- }
17
- const pg = new ProjectGenerator()
18
- await pg.processTemplates(projectPath)
19
- const sm = new StateManagerGenerator(projectPath, state, { module: options.module })
20
- await sm.generate()
21
- console.log(chalk.green('生成完成'))
22
- } catch (e) {
23
- console.log(chalk.red(`生成失败: ${e.message}`))
24
- process.exit(1)
25
- }
26
- }