diff --git a/CHANGELOG.md b/CHANGELOG.md index 409eaab..4c1cc2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,16 @@ # 0.3.0 + * Updated dependencies and SDK version * Added more documentation # 0.2.0 -* Changed project strcture to use GitPath for bricks + +* Changed project structure to use GitPath for bricks * Converted the simple folder structure to use bricks * Added ability to specifiy a custom path within the lib folder # 0.1.1 + * Added the ability to support GetX as state management solution * Changed internal working to use mason bricks @@ -16,3 +19,10 @@ * Ability to generate screen, widgets * Ability to generate data models * Ability to generate data repository, services and providers + +# 1.0.0 + +* Added the ability to support BLoC as state management solution +* Ability to generate bloc, event, state classes +* Ability to generate data repository, UI directory which includes view, widgets, bloc directories +* Adding the availability to update pubspec.yaml, adding the necessary packages diff --git a/bricks/bloc/CHANGELOG.md b/bricks/bloc/CHANGELOG.md new file mode 100644 index 0000000..f0640d6 --- /dev/null +++ b/bricks/bloc/CHANGELOG.md @@ -0,0 +1,3 @@ +# 0.1.0+1 + +- TODO: Describe initial release. diff --git a/bricks/bloc/LICENSE b/bricks/bloc/LICENSE new file mode 100644 index 0000000..ba75c69 --- /dev/null +++ b/bricks/bloc/LICENSE @@ -0,0 +1 @@ +TODO: Add your license here. diff --git a/bricks/bloc/README.md b/bricks/bloc/README.md new file mode 100644 index 0000000..08798e3 --- /dev/null +++ b/bricks/bloc/README.md @@ -0,0 +1,26 @@ +# BLoC state management feature brick + +1. Add `bloc & flutter_bloc` to your pubspec.yaml file +2. Use the brick + +```md +feature/ +┣ data/ +┃ ┣ repository/ +┃ ┃ ┗ feature_repository.dart +┃ ┗ data.dart +┣ ui/ +┃ ┣ bloc/ +┃ ┃ ┣ feature_bloc.dart +┃ ┃ ┣ feature_event.dart +┃ ┃ ┗ feature_state.dart +┃ ┣ view/ +┃ ┃ ┣ feature_page.dart +┃ ┃ ┣ feature_view.dart +┃ ┃ ┗ view.dart +┃ ┣ widgets/ +┃ ┃ ┣ feature_content.dart +┃ ┃ ┗ widgets.dart +┃ ┗ ui.dart +┗ feature.dart +``` diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/data/data.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/data/data.dart new file mode 100644 index 0000000..940dd91 --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/data/data.dart @@ -0,0 +1 @@ +export 'repository/{{name.lowerCase()}}_repository.dart'; \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/data/repository/{{name.lowerCase()}}_repository.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/data/repository/{{name.lowerCase()}}_repository.dart new file mode 100644 index 0000000..71ace2e --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/data/repository/{{name.lowerCase()}}_repository.dart @@ -0,0 +1,29 @@ +import 'package:data_provider/data_provider.dart'; +import 'package:equatable/equatable.dart'; + +abstract class {{name.pascalCase()}}Failure with EquatableMixin implements Exception { + const {{name.pascalCase()}}Failure(this.error); + final Object error; + @override + List get props => [error]; +} + +class Get{{name.pascalCase()}}ListFailure extends {{name.pascalCase()}}Failure { + Get{{name.pascalCase()}}ListFailure(super.error); +} + +class {{name.pascalCase()}}Repository { + {{name.pascalCase()}}Repository({ + required {{name.pascalCase()}}Client {{name.camelCase()}}Client, + }) : _{{name.camelCase()}}Client = {{name.camelCase()}}Client; + + final {{name.pascalCase()}}Client _{{name.camelCase()}}Client; + + Future?> get{{name.pascalCase()}}s() async { + try { + return await _{{name.camelCase()}}Client.get{{name.pascalCase()}}s(); + } catch (error, stackTrace) { + Error.throwWithStackTrace(Get{{name.pascalCase()}}ListFailure(error), stackTrace); + } + } +} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/bloc/{{name.lowerCase()}}_bloc.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/bloc/{{name.lowerCase()}}_bloc.dart new file mode 100644 index 0000000..fca6d03 --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/bloc/{{name.lowerCase()}}_bloc.dart @@ -0,0 +1,49 @@ +import 'dart:async'; +import 'package:dap_foreman_assis/{{name.lowerCase()}}/{{name.lowerCase()}}.dart'; +import 'package:equatable/equatable.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +part '{{name.lowerCase()}}_event.dart'; +part '{{name.lowerCase()}}_state.dart'; + +class {{name.pascalCase()}}Bloc extends Bloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> { + {{name.pascalCase()}}Bloc({required {{name.pascalCase()}}Repository {{name.camelCase()}}Repository}) + : _{{name.camelCase()}}Repository = {{name.camelCase()}}Repository, + super(const {{name.pascalCase()}}State.initial()) { + on<{{name.pascalCase()}}Requested>(_onRequested); + on<{{name.pascalCase()}}RefreshRequested>(_onRefresh); + } + + final {{name.pascalCase()}}Repository _{{name.camelCase()}}Repository; + + FutureOr _onRequested( + {{name.pascalCase()}}Requested event, + Emitter<{{name.pascalCase()}}State> emit, + ) async { + try { + if (state.status == {{name.pascalCase()}}Status.loading || + (state.status != {{name.pascalCase()}}Status.refreshing && + state.{{name.camelCase()}}s.isNotEmpty)) { + return; + } + emit(state.copyWith(status: {{name.pascalCase()}}Status.loading)); + final {{name.camelCase()}}s = await _{{name.camelCase()}}Repository.get{{name.pascalCase()}}s(); + emit( + state.copyWith( + status: {{name.pascalCase()}}Status.success, + {{name.camelCase()}}s: {{name.camelCase()}}s, + ), + ); + } catch (error, stackTrace) { + emit(state.copyWith(status: {{name.pascalCase()}}Status.failure)); + addError(error, stackTrace); + } + } + + void _onRefresh( + {{name.pascalCase()}}RefreshRequested event, + Emitter<{{name.pascalCase()}}State> emit, + ) { + emit(state.copyWith(status: {{name.pascalCase()}}Status.refreshing)); + add(const {{name.pascalCase()}}Requested()); + } +} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/bloc/{{name.lowerCase()}}_event.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/bloc/{{name.lowerCase()}}_event.dart new file mode 100644 index 0000000..a250337 --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/bloc/{{name.lowerCase()}}_event.dart @@ -0,0 +1,17 @@ +part of '{{name.lowerCase()}}_bloc.dart'; + +enum {{name.pascalCase()}}Status { initial, loading, success, failure, refreshing } + +sealed class {{name.pascalCase()}}Event extends Equatable { + const {{name.pascalCase()}}Event(); + @override + List get props => []; +} + +final class {{name.pascalCase()}}Requested extends {{name.pascalCase()}}Event { + const {{name.pascalCase()}}Requested(); +} + +final class {{name.pascalCase()}}RefreshRequested extends {{name.pascalCase()}}Event { + const {{name.pascalCase()}}RefreshRequested(); +} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/bloc/{{name.lowerCase()}}_state.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/bloc/{{name.lowerCase()}}_state.dart new file mode 100644 index 0000000..7c9226a --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/bloc/{{name.lowerCase()}}_state.dart @@ -0,0 +1,26 @@ +part of '{{name.lowerCase()}}_bloc.dart'; + +class {{name.pascalCase()}}State extends Equatable { + const {{name.pascalCase()}}State({ + required this.status, + this.{{name.camelCase()}}s = const [], + }); + + const {{name.pascalCase()}}State.initial() : this(status: {{name.pascalCase()}}Status.initial); + + final {{name.pascalCase()}}Status status; + final List<{{name.pascalCase()}}Item> {{name.camelCase()}}s; + + @override + List get props => [status, {{name.camelCase()}}s]; + + {{name.pascalCase()}}State copyWith({ + {{name.pascalCase()}}Status? status, + List<{{name.pascalCase()}}Item>? {{name.camelCase()}}s, + }) { + return {{name.pascalCase()}}State( + status: status ?? this.status, + {{name.camelCase()}}s: {{name.camelCase()}}s ?? this.{{name.camelCase()}}s, + ); + } +} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/ui.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/ui.dart new file mode 100644 index 0000000..84f0be4 --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/ui.dart @@ -0,0 +1,3 @@ +export 'bloc/{{name.lowerCase()}}_bloc.dart'; +export 'view/view.dart'; +export 'widgets/widgets.dart'; \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/view/view.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/view/view.dart new file mode 100644 index 0000000..ec9c919 --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/view/view.dart @@ -0,0 +1,2 @@ +export '{{name.lowerCase()}}_page.dart'; +export '{{name.lowerCase()}}_view.dart'; diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/view/{{name.lowerCase()}}_page.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/view/{{name.lowerCase()}}_page.dart new file mode 100644 index 0000000..083f7e9 --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/view/{{name.lowerCase()}}_page.dart @@ -0,0 +1,23 @@ +import 'package:app_ui/app_ui.dart'; +import 'package:dap_foreman_assis/{{name.lowerCase()}}/{{name.lowerCase()}}.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +part '{{name.lowerCase()}}_view.dart'; + +class {{name.pascalCase()}}Page extends StatelessWidget { + const {{name.pascalCase()}}Page({super.key}); + + @override + Widget build(BuildContext context) { + return BlocProvider( + create: (_) => {{name.pascalCase()}}Bloc( + {{name.camelCase()}}Repository: {{name.pascalCase()}}Repository( + {{name.camelCase()}}Client: {{name.pascalCase()}}Client(), + ), + ), + child: const Scaffold( + body: {{name.pascalCase()}}View(), + ), + ); + } +} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/view/{{name.lowerCase()}}_view.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/view/{{name.lowerCase()}}_view.dart new file mode 100644 index 0000000..084eb65 --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/view/{{name.lowerCase()}}_view.dart @@ -0,0 +1,10 @@ +part of '{{name.lowerCase()}}_page.dart'; + +class {{name.pascalCase()}}View extends StatelessWidget { + const {{name.pascalCase()}}View({super.key}); + + @override + Widget build(BuildContext context) { + return {{name.pascalCase()}}Content(); + } +} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/widgets/widgets.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/widgets/widgets.dart new file mode 100644 index 0000000..92aaf75 --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/widgets/widgets.dart @@ -0,0 +1 @@ +export '{{name.lowerCase()}}_content.dart'; diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/widgets/{{name.lowerCase()}}_content.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/widgets/{{name.lowerCase()}}_content.dart new file mode 100644 index 0000000..84c498b --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/ui/widgets/{{name.lowerCase()}}_content.dart @@ -0,0 +1,10 @@ +import 'package:flutter/material.dart'; + +class {{name.pascalCase()}}Content extends StatelessWidget { + const {{name.pascalCase()}}Content({super.key}); + + @override + Widget build(BuildContext context) { + return const SizedBox.shrink(); + } +} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{name.lowerCase()}}/{{name.lowerCase()}}.dart b/bricks/bloc/__brick__/{{name.lowerCase()}}/{{name.lowerCase()}}.dart new file mode 100644 index 0000000..5c9dcd9 --- /dev/null +++ b/bricks/bloc/__brick__/{{name.lowerCase()}}/{{name.lowerCase()}}.dart @@ -0,0 +1,2 @@ +export 'data/data.dart'; +export 'ui/ui.dart'; \ No newline at end of file diff --git a/bricks/bloc/brick.yaml b/bricks/bloc/brick.yaml new file mode 100644 index 0000000..c6cf972 --- /dev/null +++ b/bricks/bloc/brick.yaml @@ -0,0 +1,14 @@ +name: bloc +description: Create a feature with BLoC state management with Feature First based architecture + +version: 1.0.0 + +environment: + mason: "0.1.0-dev.49" + +vars: + name: + type: string + description: The name of the feature being generated. + default: feature + prompt: Enter the feature name [lowercase only] diff --git a/bricks/bloc/lib/update_pubspec.dart b/bricks/bloc/lib/update_pubspec.dart new file mode 100644 index 0000000..dccd18e --- /dev/null +++ b/bricks/bloc/lib/update_pubspec.dart @@ -0,0 +1,42 @@ +import 'package:mason/mason.dart'; + +Future run(HookContext context) async { + final logger = context.logger; + + // Check if `bloc` and `flutter_bloc` are already in pubspec.yaml + final pubspecFile = File('pubspec.yaml'); + if (!await pubspecFile.exists()) { + logger.err('pubspec.yaml not found.'); + return; + } + + String pubspecContent = await pubspecFile.readAsString(); + + const dependencies = [ + 'bloc: ^8.0.0', + 'flutter_bloc: ^8.0.0', + 'equatable: ^2.0.0', + 'data_provider:', + ]; + + bool needsUpdate = false; + + for (final dependency in dependencies) { + if (!pubspecContent.contains(dependency)) { + needsUpdate = true; + break; + } + } + + if (needsUpdate) { + logger.info('Adding dependencies to pubspec.yaml...'); + pubspecContent = pubspecContent.replaceFirst( + '\ndependencies:', + '\ndependencies:\n bloc: ^8.0.0\n flutter_bloc: ^8.0.0\n equatable: ^2.0.0\n data_provider:\n path: ./packages/data_provider', + ); + await pubspecFile.writeAsString(pubspecContent); + logger.info('Dependencies added successfully.'); + } else { + logger.info('Dependencies already exist in pubspec.yaml.'); + } +} diff --git a/lib/commands/generate.dart b/lib/commands/generate.dart index d66c6b8..71c7cb4 100644 --- a/lib/commands/generate.dart +++ b/lib/commands/generate.dart @@ -30,7 +30,7 @@ class GenerateCommand extends Command { 'type', abbr: 't', mandatory: true, - help: 'Type of feature:\n[simple] Simple\n[getx] GetX', + help: 'Type of feature:\n[simple] Simple\n[bloc] BLoC\n[getx] GetX', ); argParser.addOption( 'path', @@ -54,6 +54,9 @@ class GenerateCommand extends Command { case 'simple': generateSimple(argResults!); break; + case 'bloc': + generateBLoC(argResults!); + break; case 'getx': generateGetX(argResults!); break; @@ -66,3 +69,4 @@ class GenerateCommand extends Command { LogService.success('Feature ${argResults!['name']} created successfully'); } } + diff --git a/lib/functions/bloc.dart b/lib/functions/bloc.dart new file mode 100644 index 0000000..ae77ca0 --- /dev/null +++ b/lib/functions/bloc.dart @@ -0,0 +1,43 @@ + +import 'dart:io'; + +import 'package:args/args.dart'; +import 'package:mason/mason.dart'; + +import '../utils/directory.dart'; +import '../utils/logs.dart'; + +/// The _generateBLoCItems function generates the folder structure according +/// BLoC imports and usage. +/// +/// [dryRun] is a dev-only boolean to generate example folders +Future generateBLoC( + ArgResults argResults, { + bool dryRun = false, +}) async { + final customPath = argResults['path'] != null ? true : false; + var dir = argResults['path'] ?? 'feature'; + if (dryRun) { + dir = 'example'; + } + try { + final brick = Brick.git( + GitPath( + 'https://github.com/RyanDsilva/feature_folder_cli', + path: 'bricks/bloc', + ), + ); + final generator = await MasonGenerator.fromBrick(brick); + final target = DirectoryGeneratorTarget( + Directory(customPath + ? DirectoryService.replaceAsExpected(path: 'lib/$dir') + : DirectoryService.paths[dir]!), + ); + await generator.generate( + target, + vars: {'name': argResults['name'].toString()}, + ); + } on Exception catch (e) { + LogService.error(e.toString()); + } +} diff --git a/lib/functions/index.dart b/lib/functions/index.dart index d35c903..c398256 100644 --- a/lib/functions/index.dart +++ b/lib/functions/index.dart @@ -1,2 +1,3 @@ +export 'bloc.dart'; export 'getx.dart'; -export 'simple.dart'; +export 'simple.dart'; \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 74aadb7..46b27c1 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,42 +5,47 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "8880b4cfe7b5b17d57c052a5a3a8cc1d4f546261c7cc8fbd717bd53f48db0568" + sha256: "88399e291da5f7e889359681a8f64b18c5123e03576b01f32a6a276611e511c3" url: "https://pub.dev" source: hosted - version: "59.0.0" + version: "78.0.0" + _macros: + dependency: transitive + description: dart + source: sdk + version: "0.3.3" analyzer: dependency: transitive description: name: analyzer - sha256: a89627f49b0e70e068130a36571409726b04dab12da7e5625941d2c8ec278b96 + sha256: "62899ef43d0b962b056ed2ebac6b47ec76ffd003d5f7c4e4dc870afe63188e33" url: "https://pub.dev" source: hosted - version: "5.11.1" + version: "7.1.0" ansicolor: dependency: "direct main" description: name: ansicolor - sha256: "607f8fa9786f392043f169898923e6c59b4518242b68b8862eb8a8b7d9c30b4a" + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.3" archive: dependency: transitive description: name: archive - sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a" + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d url: "https://pub.dev" source: hosted - version: "3.3.7" + version: "3.6.1" args: dependency: "direct main" description: name: args - sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a + sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 url: "https://pub.dev" source: hosted - version: "2.4.1" + version: "2.6.0" async: dependency: transitive description: @@ -61,18 +66,18 @@ packages: dependency: transitive description: name: checked_yaml - sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" collection: dependency: transitive description: name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.17.1" + version: "1.19.1" convert: dependency: transitive description: @@ -93,10 +98,18 @@ packages: dependency: transitive description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.6" + ffi: + dependency: transitive + description: + name: ffi + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + url: "https://pub.dev" + source: hosted + version: "2.1.3" file: dependency: transitive description: @@ -125,10 +138,10 @@ packages: dependency: transitive description: name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "0.13.5" + version: "1.2.2" http_multi_server: dependency: transitive description: @@ -165,10 +178,10 @@ packages: dependency: transitive description: name: json_annotation - sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317 + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" url: "https://pub.dev" source: hosted - version: "4.8.0" + version: "4.9.0" logging: dependency: transitive description: @@ -177,38 +190,46 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + macros: + dependency: transitive + description: + name: macros + sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656" + url: "https://pub.dev" + source: hosted + version: "0.1.3-main.0" mason: dependency: "direct main" description: name: mason - sha256: c6c25b83c61c628fc9946be39f01291808342d8e8df75c61fc7b6a671bd0a8f8 + sha256: "4439bb2902b24298ff5c8e4d173afd7c665d9837ae0324608e7d2963c37e7928" url: "https://pub.dev" source: hosted - version: "0.1.0-dev.49" + version: "0.1.0" mason_logger: dependency: transitive description: name: mason_logger - sha256: ca34d14e998cd7a7738e7320b102aa45fb363aa49a290084b211ababf75bb7ee + sha256: b6d6d159927a4165f197ffc5993ea680dd41c59daf35bff23bae28390c09a36e url: "https://pub.dev" source: hosted - version: "0.2.5" + version: "0.3.1" matcher: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.17" meta: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.16.0" mime: dependency: transitive description: @@ -245,18 +266,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" - url: "https://pub.dev" - source: hosted - version: "1.8.3" - pointycastle: - dependency: transitive - description: - name: pointycastle - sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "3.7.3" + version: "1.9.1" pool: dependency: transitive description: @@ -269,10 +282,10 @@ packages: dependency: transitive description: name: pub_semver - sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.5" shelf: dependency: transitive description: @@ -365,26 +378,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "13b41f318e2a5751c3169137103b60c584297353d4b1761b66029bae6411fe46" + sha256: "8391fbe68d520daf2314121764d38e37f934c02fd7301ad18307bd93bd6b725d" url: "https://pub.dev" source: hosted - version: "1.24.3" + version: "1.25.14" test_api: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.7.4" test_core: dependency: transitive description: name: test_core - sha256: "99806e9e6d95c7b059b7a0fc08f07fc53fabe54a829497f0d9676299f1e8637e" + sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa" url: "https://pub.dev" source: hosted - version: "0.5.3" + version: "0.6.8" typed_data: dependency: transitive description: @@ -405,10 +418,18 @@ packages: dependency: transitive description: name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + web: + dependency: transitive + description: + name: web + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.0" web_socket_channel: dependency: transitive description: @@ -425,14 +446,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + win32: + dependency: transitive + description: + name: win32 + sha256: "154360849a56b7b67331c21f09a386562d88903f90a1099c5987afc1912e1f29" + url: "https://pub.dev" + source: hosted + version: "5.10.0" yaml: dependency: transitive description: name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.3" sdks: - dart: ">=2.19.0 <4.0.0" + dart: ">=3.5.0 <4.0.0" flutter: ">=3.3.0" diff --git a/pubspec.yaml b/pubspec.yaml index 13b1120..38c2e76 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: >- CLI utility that generates a folder structure to reduce the repetitive work required to setup directories for models, services, repositories, screens and widgets. -version: 0.3.0 +version: 1.0.0 homepage: https://github.com/RyanDsilva/feature_folder_cli documentation: https://github.com/RyanDsilva/feature_folder_cli#folder-by-feature-cli-utility @@ -13,13 +13,13 @@ environment: flutter: ">=3.3.0" dependencies: - ansicolor: ^2.0.1 - args: ^2.4.1 - mason: 0.1.0-dev.49 - path: ^1.8.2 + ansicolor: ^2.0.3 + args: ^2.6.0 + mason: 0.1.0 + path: ^1.9.1 dev_dependencies: - test: ^1.24.3 + test: ^1.25.14 executables: ff: main