Skip to content

Feature/provider package impl #106

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Oct 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import 'package:flutter/material.dart';
{{^web_only}}import 'package:loader_overlay/loader_overlay.dart';{{/web_only}}
{{#screen_util}}import 'package:flutter_screenutil/flutter_screenutil.dart';{{/screen_util}}
{{#isBloc}}import 'package:onix_flutter_bloc/onix_flutter_bloc.dart';
import 'package:{{project_name}}/app/bloc/app_bloc_imports.dart';
import 'package:get_it/get_it.dart';{{/isBloc}}
{{#isProvider}}import 'package:{{project_name}}/core/arch/provider/base_provider_state.dart';
import 'package:{{project_name}}/app/bloc/app_bloc_imports.dart';{{/isBloc}}
{{^isBase}}import 'package:get_it/get_it.dart';{{/isBase}}
{{#isProvider}}import 'package:onix_flutter_provider/onix_flutter_provider.dart';
import 'package:{{project_name}}/app/provider/app_provider.dart';{{/isProvider}}
import 'package:{{project_name}}/presentation/style/theme/theme_imports.dart';
{{#isBase}}import 'package:{{project_name}}/core/arch/widget/common/theme_switcher.dart';{{/isBase}}
Expand Down Expand Up @@ -39,6 +39,10 @@ class _AppState extends State<App>
@override
AppBloc createBloc() => GetIt.I.get<AppBloc>();
{{/isBloc}}
{{#isProvider}}
@override
AppProvider createProvider() => GetIt.I.get<AppProvider>();
{{/isProvider}}

@override
Widget {{#isBase}}build{{/isBase}}{{^isBase}}buildWidget{{/isBase}}(BuildContext context) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:{{project_name}}/core/arch/provider/base_provider.dart';
import 'package:onix_flutter_provider/onix_flutter_provider.dart';

class AppProvider extends BaseProvider {
ThemeMode _themeMode = ThemeMode.system;
Expand Down

This file was deleted.

This file was deleted.

11 changes: 4 additions & 7 deletions bricks/flutter_clean_base/hooks/post_gen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -158,16 +158,14 @@ Future<void> getDependencies(HookContext context) async {
];

if (context.vars['isBloc']) {
dependencies
..add('flutter_bloc')
..add('onix_flutter_bloc');
dependencies..addAll(['flutter_bloc', 'onix_flutter_bloc']);
await removeStateManagers(['provider']);
await Process.run('rm', ['theme_util.dart'],
workingDirectory: '$name/lib/app/util');
}

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

if (context.vars['isBase']) {
// TODO(Ivan Modlo): Remove it later
await removeStateManagers(['provider']);
await removeStateManagers(['provider', 'bloc']);
}

if (!context.vars['web_only']) {
Expand Down Expand Up @@ -298,8 +296,7 @@ Future<void> getDependencies(HookContext context) async {
Future<void> removeStateManagers(List<String> managers) async {
for (var manager in managers) {
await Process.run('rm', ['-r', manager], workingDirectory: '$name/lib/app');
await Process.run('rm', ['-r', manager],
workingDirectory: '$name/lib/core/arch');

await Process.run('rm', ['$manager.dart'],
workingDirectory: '$name/lib/core/di');
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,6 @@ import 'package:onix_flutter_bricks/util/extension/codelines_extension.dart';
import 'package:recase/recase.dart';

mixin ProviderContentMixin on ScreenGenerationService {
String createProviderImportsContent({
required String screenName,
required StateManagementVariant stateManagement,
}) {
final screenClassImport = screenName.snakeCase;
final codeLines = List<String>.empty(growable: true);
codeLines.add('export \'${screenClassImport}_screen_provider.dart\';');
codeLines.add('export \'${screenClassImport}_screen_state.dart\';');
codeLines.addNewLine();
return codeLines.join('\n');
}

String createProviderContent({
required String projectName,
required String screenName,
Expand All @@ -25,57 +13,27 @@ mixin ProviderContentMixin on ScreenGenerationService {
final screenModelName = screenName.pascalCase;
final className = '${screenName.pascalCase}Screen$stateManagementSuffix';

final codeLines = List<String>.empty(growable: true);

///Create Provider class code
codeLines.add('import \'dart:async\';');
codeLines.addNewLine();
codeLines.add(
'import \'package:$projectName/core/arch/provider/base_provider.dart\';');

codeLines.addNewLine();
codeLines.add('class $className extends BaseProvider {');

codeLines.add('${screenModelName}ScreenProvider() : super() {');
codeLines.add('init();');
codeLines.add('}');
codeLines.addNewLine();
codeLines.add('void init() {');
codeLines.add('// Add your initialization code here');
codeLines.add('notifyListeners();');
codeLines.add('}');
codeLines.add('}');
codeLines.addNewLine();

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

String createProviderState({
required String screenName,
required String projectName,
}) {
final screenModelName = screenName.pascalCase;
final screenClassImport = screenName.snakeCase;
final codeLines = List<String>.empty(growable: true);
codeLines
.add('import \'package:freezed_annotation/freezed_annotation.dart\';');
codeLines.add(
'import \'package:$projectName/core/arch/provider/base_provider.dart\';');

codeLines.addNewLine();
codeLines.add('part \'${screenClassImport}_screen_state.freezed.dart\';');

///Add Provider State

codeLines.add('@freezed');
codeLines.add(
'class ${screenModelName}ScreenState with _\$${screenModelName}ScreenState implements ProviderState {');
codeLines.add('const factory ${screenModelName}ScreenState({');
codeLines.add('@Default(true) bool isLoading,');
codeLines.add('}) = _${screenName.pascalCase}ScreenState;');
codeLines.add('}');
final codeLines = List<String>.empty(growable: true)

///Create Provider class code
..add("import 'dart:async';")
..addNewLine()
..add(
"import 'package:onix_flutter_provider/onix_flutter_provider.dart';",
)
..addNewLine()
..add('class $className extends BaseProvider {')
..add('${screenModelName}ScreenProvider() : super() {')
..add('init();')
..add('}')
..addNewLine()
..add('void init() {')
..add('// Add your initialization code here')
..add('notifyListeners();')
..add('}')
..add('}')
..addNewLine();

codeLines.addNewLine();
return codeLines.join('\n');
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,53 +11,63 @@ class ProviderScreenCodeContent extends ScreenCodeContent {
}) {
final screenClassName = screenName.pascalCase;
final screenClassImport = screenName.snakeCase;
final codeLines = List<String>.empty(growable: true);
final codeLines = List<String>.empty(growable: true)

///Add imports
codeLines.add('import \'package:flutter/material.dart\';');
///Add imports
..add("import 'package:flutter/material.dart';");
if (!isGoRouter) {
codeLines.add('import \'package:auto_route/annotations.dart\';');
codeLines.add("import 'package:auto_route/annotations.dart';");
}

codeLines.add(
'import \'package:$projectName/core/arch/provider/base_provider_state.dart\';');

codeLines.add(
'import \'package:$projectName/presentation/screen/${screenClassImport}_screen/provider/${screenClassImport}_screen_provider.dart\';');
codeLines.addNewLine();
codeLines
..add("import 'package:get_it/get_it.dart';")
..add(
"import 'package:onix_flutter_provider/onix_flutter_provider.dart';",
)
..add(
"import 'package:$projectName/presentation/screen/${screenClassImport}_screen/provider/${screenClassImport}_screen_provider.dart';",
)
..addNewLine();

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

///Add screen widget code
codeLines.add('class ${screenClassName}Screen extends StatefulWidget {');
codeLines.add('const ${screenClassName}Screen({');
codeLines.add('super.key,');
codeLines.add('});');
codeLines.addNewLine();
codeLines.add('@override');
codeLines.add(
'State<${screenClassName}Screen> createState() => _${screenClassName}ScreenState();');
codeLines.add('}');
codeLines.addNewLine();
codeLines
..add('class ${screenClassName}Screen extends StatefulWidget {')
..add('const ${screenClassName}Screen({')
..add('super.key,')
..add('});')
..addNewLine()
..add('@override')
..add(
'State<${screenClassName}Screen> createState() => _${screenClassName}ScreenState();',
)
..add('}')
..addNewLine()

///Add screen widget state code
codeLines.add('class _${screenClassName}ScreenState');
codeLines.add('extends BaseProviderState<');
codeLines.add('${screenClassName}ScreenProvider, ');
codeLines.add('${screenClassName}Screen> {');
codeLines.add('@override');
codeLines.add('Widget buildWidget(BuildContext context) {');
codeLines.add('return Scaffold(');
codeLines.add('body: SizedBox.expand(');
codeLines.add('child: providerConsumer(');
codeLines.add('stateListener: (provider) => const Center(');
codeLines.add('child: Text(\'$screenClassName screen\'),');
codeLines.add('),');
codeLines.add('),),);}}');
codeLines.addNewLine();
///Add screen widget state code
..add('class _${screenClassName}ScreenState')
..add('extends BaseProviderState<')
..add('${screenClassName}ScreenProvider, ')
..add('${screenClassName}Screen> {')
..add('@override')
..add(
'MainScreenProvider createProvider() => GetIt.I<MainScreenProvider>();',
)
..addNewLine()
..add('@override')
..add('Widget buildWidget(BuildContext context) {')
..add('return Scaffold(')
..add('body: SizedBox.expand(')
..add('child: providerConsumer(')
..add('stateListener: (provider) => const Center(')
..add("child: Text('$screenClassName screen'),")
..add('),')
..add('),),);}}')
..addNewLine();

return codeLines.join('\n');
}
Expand Down
Loading