Skip to content

Commit b7d2344

Browse files
authored
Feature/provider package impl (#106)
* feat: refactoring brick * feat: refactoring brick * feat: refactoring brick * feat: refactoring provider generator
1 parent 6e60940 commit b7d2344

File tree

11 files changed

+143
-323
lines changed

11 files changed

+143
-323
lines changed

bricks/flutter_clean_base/__brick__/{{project_name.snakeCase()}}/lib/app.gen.dart

+7-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import 'package:flutter/material.dart';
44
{{^web_only}}import 'package:loader_overlay/loader_overlay.dart';{{/web_only}}
55
{{#screen_util}}import 'package:flutter_screenutil/flutter_screenutil.dart';{{/screen_util}}
66
{{#isBloc}}import 'package:onix_flutter_bloc/onix_flutter_bloc.dart';
7-
import 'package:{{project_name}}/app/bloc/app_bloc_imports.dart';
8-
import 'package:get_it/get_it.dart';{{/isBloc}}
9-
{{#isProvider}}import 'package:{{project_name}}/core/arch/provider/base_provider_state.dart';
7+
import 'package:{{project_name}}/app/bloc/app_bloc_imports.dart';{{/isBloc}}
8+
{{^isBase}}import 'package:get_it/get_it.dart';{{/isBase}}
9+
{{#isProvider}}import 'package:onix_flutter_provider/onix_flutter_provider.dart';
1010
import 'package:{{project_name}}/app/provider/app_provider.dart';{{/isProvider}}
1111
import 'package:{{project_name}}/presentation/style/theme/theme_imports.dart';
1212
{{#isBase}}import 'package:{{project_name}}/core/arch/widget/common/theme_switcher.dart';{{/isBase}}
@@ -39,6 +39,10 @@ class _AppState extends State<App>
3939
@override
4040
AppBloc createBloc() => GetIt.I.get<AppBloc>();
4141
{{/isBloc}}
42+
{{#isProvider}}
43+
@override
44+
AppProvider createProvider() => GetIt.I.get<AppProvider>();
45+
{{/isProvider}}
4246

4347
@override
4448
Widget {{#isBase}}build{{/isBase}}{{^isBase}}buildWidget{{/isBase}}(BuildContext context) {

bricks/flutter_clean_base/__brick__/{{project_name.snakeCase()}}/lib/app/provider/app_provider.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'dart:async';
22
import 'package:flutter/material.dart';
3-
import 'package:{{project_name}}/core/arch/provider/base_provider.dart';
3+
import 'package:onix_flutter_provider/onix_flutter_provider.dart';
44

55
class AppProvider extends BaseProvider {
66
ThemeMode _themeMode = ThemeMode.system;

bricks/flutter_clean_base/__brick__/{{project_name.snakeCase()}}/lib/core/arch/provider/base_provider.dart

-60
This file was deleted.

bricks/flutter_clean_base/__brick__/{{project_name.snakeCase()}}/lib/core/arch/provider/base_provider_state.dart

-68
This file was deleted.

bricks/flutter_clean_base/hooks/post_gen.dart

+4-7
Original file line numberDiff line numberDiff line change
@@ -158,16 +158,14 @@ Future<void> getDependencies(HookContext context) async {
158158
];
159159

160160
if (context.vars['isBloc']) {
161-
dependencies
162-
..add('flutter_bloc')
163-
..add('onix_flutter_bloc');
161+
dependencies..addAll(['flutter_bloc', 'onix_flutter_bloc']);
164162
await removeStateManagers(['provider']);
165163
await Process.run('rm', ['theme_util.dart'],
166164
workingDirectory: '$name/lib/app/util');
167165
}
168166

169167
if (context.vars['isProvider']) {
170-
dependencies.add('provider');
168+
dependencies.addAll(['provider', 'onix_flutter_provider']);
171169
await removeStateManagers(['bloc']);
172170
await Process.run('rm', ['theme_util.dart'],
173171
workingDirectory: '$name/lib/app/util');
@@ -179,7 +177,7 @@ Future<void> getDependencies(HookContext context) async {
179177

180178
if (context.vars['isBase']) {
181179
// TODO(Ivan Modlo): Remove it later
182-
await removeStateManagers(['provider']);
180+
await removeStateManagers(['provider', 'bloc']);
183181
}
184182

185183
if (!context.vars['web_only']) {
@@ -298,8 +296,7 @@ Future<void> getDependencies(HookContext context) async {
298296
Future<void> removeStateManagers(List<String> managers) async {
299297
for (var manager in managers) {
300298
await Process.run('rm', ['-r', manager], workingDirectory: '$name/lib/app');
301-
await Process.run('rm', ['-r', manager],
302-
workingDirectory: '$name/lib/core/arch');
299+
303300
await Process.run('rm', ['$manager.dart'],
304301
workingDirectory: '$name/lib/core/di');
305302
}

lib/domain/service/file_generator_service/screen_generators/gen/mixins/provider_content_mixin.dart

+20-62
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,6 @@ import 'package:onix_flutter_bricks/util/extension/codelines_extension.dart';
44
import 'package:recase/recase.dart';
55

66
mixin ProviderContentMixin on ScreenGenerationService {
7-
String createProviderImportsContent({
8-
required String screenName,
9-
required StateManagementVariant stateManagement,
10-
}) {
11-
final screenClassImport = screenName.snakeCase;
12-
final codeLines = List<String>.empty(growable: true);
13-
codeLines.add('export \'${screenClassImport}_screen_provider.dart\';');
14-
codeLines.add('export \'${screenClassImport}_screen_state.dart\';');
15-
codeLines.addNewLine();
16-
return codeLines.join('\n');
17-
}
18-
197
String createProviderContent({
208
required String projectName,
219
required String screenName,
@@ -25,57 +13,27 @@ mixin ProviderContentMixin on ScreenGenerationService {
2513
final screenModelName = screenName.pascalCase;
2614
final className = '${screenName.pascalCase}Screen$stateManagementSuffix';
2715

28-
final codeLines = List<String>.empty(growable: true);
29-
30-
///Create Provider class code
31-
codeLines.add('import \'dart:async\';');
32-
codeLines.addNewLine();
33-
codeLines.add(
34-
'import \'package:$projectName/core/arch/provider/base_provider.dart\';');
35-
36-
codeLines.addNewLine();
37-
codeLines.add('class $className extends BaseProvider {');
38-
39-
codeLines.add('${screenModelName}ScreenProvider() : super() {');
40-
codeLines.add('init();');
41-
codeLines.add('}');
42-
codeLines.addNewLine();
43-
codeLines.add('void init() {');
44-
codeLines.add('// Add your initialization code here');
45-
codeLines.add('notifyListeners();');
46-
codeLines.add('}');
47-
codeLines.add('}');
48-
codeLines.addNewLine();
49-
50-
return codeLines.join('\n');
51-
}
52-
53-
String createProviderState({
54-
required String screenName,
55-
required String projectName,
56-
}) {
57-
final screenModelName = screenName.pascalCase;
58-
final screenClassImport = screenName.snakeCase;
59-
final codeLines = List<String>.empty(growable: true);
60-
codeLines
61-
.add('import \'package:freezed_annotation/freezed_annotation.dart\';');
62-
codeLines.add(
63-
'import \'package:$projectName/core/arch/provider/base_provider.dart\';');
64-
65-
codeLines.addNewLine();
66-
codeLines.add('part \'${screenClassImport}_screen_state.freezed.dart\';');
67-
68-
///Add Provider State
69-
70-
codeLines.add('@freezed');
71-
codeLines.add(
72-
'class ${screenModelName}ScreenState with _\$${screenModelName}ScreenState implements ProviderState {');
73-
codeLines.add('const factory ${screenModelName}ScreenState({');
74-
codeLines.add('@Default(true) bool isLoading,');
75-
codeLines.add('}) = _${screenName.pascalCase}ScreenState;');
76-
codeLines.add('}');
16+
final codeLines = List<String>.empty(growable: true)
17+
18+
///Create Provider class code
19+
..add("import 'dart:async';")
20+
..addNewLine()
21+
..add(
22+
"import 'package:onix_flutter_provider/onix_flutter_provider.dart';",
23+
)
24+
..addNewLine()
25+
..add('class $className extends BaseProvider {')
26+
..add('${screenModelName}ScreenProvider() : super() {')
27+
..add('init();')
28+
..add('}')
29+
..addNewLine()
30+
..add('void init() {')
31+
..add('// Add your initialization code here')
32+
..add('notifyListeners();')
33+
..add('}')
34+
..add('}')
35+
..addNewLine();
7736

78-
codeLines.addNewLine();
7937
return codeLines.join('\n');
8038
}
8139
}

lib/domain/service/file_generator_service/screen_generators/gen/provider_screen_code_content.dart

+45-35
Original file line numberDiff line numberDiff line change
@@ -11,53 +11,63 @@ class ProviderScreenCodeContent extends ScreenCodeContent {
1111
}) {
1212
final screenClassName = screenName.pascalCase;
1313
final screenClassImport = screenName.snakeCase;
14-
final codeLines = List<String>.empty(growable: true);
14+
final codeLines = List<String>.empty(growable: true)
1515

16-
///Add imports
17-
codeLines.add('import \'package:flutter/material.dart\';');
16+
///Add imports
17+
..add("import 'package:flutter/material.dart';");
1818
if (!isGoRouter) {
19-
codeLines.add('import \'package:auto_route/annotations.dart\';');
19+
codeLines.add("import 'package:auto_route/annotations.dart';");
2020
}
2121

22-
codeLines.add(
23-
'import \'package:$projectName/core/arch/provider/base_provider_state.dart\';');
24-
25-
codeLines.add(
26-
'import \'package:$projectName/presentation/screen/${screenClassImport}_screen/provider/${screenClassImport}_screen_provider.dart\';');
27-
codeLines.addNewLine();
22+
codeLines
23+
..add("import 'package:get_it/get_it.dart';")
24+
..add(
25+
"import 'package:onix_flutter_provider/onix_flutter_provider.dart';",
26+
)
27+
..add(
28+
"import 'package:$projectName/presentation/screen/${screenClassImport}_screen/provider/${screenClassImport}_screen_provider.dart';",
29+
)
30+
..addNewLine();
2831

2932
///Add annotation in AutoRoute navigation used
3033
if (!isGoRouter) {
3134
codeLines.add('@RoutePage()');
3235
}
3336

3437
///Add screen widget code
35-
codeLines.add('class ${screenClassName}Screen extends StatefulWidget {');
36-
codeLines.add('const ${screenClassName}Screen({');
37-
codeLines.add('super.key,');
38-
codeLines.add('});');
39-
codeLines.addNewLine();
40-
codeLines.add('@override');
41-
codeLines.add(
42-
'State<${screenClassName}Screen> createState() => _${screenClassName}ScreenState();');
43-
codeLines.add('}');
44-
codeLines.addNewLine();
38+
codeLines
39+
..add('class ${screenClassName}Screen extends StatefulWidget {')
40+
..add('const ${screenClassName}Screen({')
41+
..add('super.key,')
42+
..add('});')
43+
..addNewLine()
44+
..add('@override')
45+
..add(
46+
'State<${screenClassName}Screen> createState() => _${screenClassName}ScreenState();',
47+
)
48+
..add('}')
49+
..addNewLine()
4550

46-
///Add screen widget state code
47-
codeLines.add('class _${screenClassName}ScreenState');
48-
codeLines.add('extends BaseProviderState<');
49-
codeLines.add('${screenClassName}ScreenProvider, ');
50-
codeLines.add('${screenClassName}Screen> {');
51-
codeLines.add('@override');
52-
codeLines.add('Widget buildWidget(BuildContext context) {');
53-
codeLines.add('return Scaffold(');
54-
codeLines.add('body: SizedBox.expand(');
55-
codeLines.add('child: providerConsumer(');
56-
codeLines.add('stateListener: (provider) => const Center(');
57-
codeLines.add('child: Text(\'$screenClassName screen\'),');
58-
codeLines.add('),');
59-
codeLines.add('),),);}}');
60-
codeLines.addNewLine();
51+
///Add screen widget state code
52+
..add('class _${screenClassName}ScreenState')
53+
..add('extends BaseProviderState<')
54+
..add('${screenClassName}ScreenProvider, ')
55+
..add('${screenClassName}Screen> {')
56+
..add('@override')
57+
..add(
58+
'MainScreenProvider createProvider() => GetIt.I<MainScreenProvider>();',
59+
)
60+
..addNewLine()
61+
..add('@override')
62+
..add('Widget buildWidget(BuildContext context) {')
63+
..add('return Scaffold(')
64+
..add('body: SizedBox.expand(')
65+
..add('child: providerConsumer(')
66+
..add('stateListener: (provider) => const Center(')
67+
..add("child: Text('$screenClassName screen'),")
68+
..add('),')
69+
..add('),),);}}')
70+
..addNewLine();
6171

6272
return codeLines.join('\n');
6373
}

0 commit comments

Comments
 (0)