feat: update feature brick
This commit is contained in:
		
							parent
							
								
									6286d348f8
								
							
						
					
					
						commit
						d43ace5219
					
				| @ -1 +1 @@ | |||||||
| include: package:wyatt_analysis/analysis_options.flutter.experimental.yaml | include: package:wyatt_analysis/analysis_options.flutter.yaml | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								apps/wyatt_feature_brick/android/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								apps/wyatt_feature_brick/android/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,13 +0,0 @@ | |||||||
| gradle-wrapper.jar |  | ||||||
| /.gradle |  | ||||||
| /captures/ |  | ||||||
| /gradlew |  | ||||||
| /gradlew.bat |  | ||||||
| /local.properties |  | ||||||
| GeneratedPluginRegistrant.java |  | ||||||
| 
 |  | ||||||
| # Remember to never publicly share your keystore. |  | ||||||
| # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app |  | ||||||
| key.properties |  | ||||||
| **/*.keystore |  | ||||||
| **/*.jks |  | ||||||
| @ -1,71 +0,0 @@ | |||||||
| def localProperties = new Properties() |  | ||||||
| def localPropertiesFile = rootProject.file('local.properties') |  | ||||||
| if (localPropertiesFile.exists()) { |  | ||||||
|     localPropertiesFile.withReader('UTF-8') { reader -> |  | ||||||
|         localProperties.load(reader) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| def flutterRoot = localProperties.getProperty('flutter.sdk') |  | ||||||
| if (flutterRoot == null) { |  | ||||||
|     throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| def flutterVersionCode = localProperties.getProperty('flutter.versionCode') |  | ||||||
| if (flutterVersionCode == null) { |  | ||||||
|     flutterVersionCode = '1' |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| def flutterVersionName = localProperties.getProperty('flutter.versionName') |  | ||||||
| if (flutterVersionName == null) { |  | ||||||
|     flutterVersionName = '1.0' |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| apply plugin: 'com.android.application' |  | ||||||
| apply plugin: 'kotlin-android' |  | ||||||
| apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" |  | ||||||
| 
 |  | ||||||
| android { |  | ||||||
|     compileSdkVersion flutter.compileSdkVersion |  | ||||||
|     ndkVersion flutter.ndkVersion |  | ||||||
| 
 |  | ||||||
|     compileOptions { |  | ||||||
|         sourceCompatibility JavaVersion.VERSION_1_8 |  | ||||||
|         targetCompatibility JavaVersion.VERSION_1_8 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     kotlinOptions { |  | ||||||
|         jvmTarget = '1.8' |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     sourceSets { |  | ||||||
|         main.java.srcDirs += 'src/main/kotlin' |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     defaultConfig { |  | ||||||
|         // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). |  | ||||||
|         applicationId "com.example.wyatt_feature_brick" |  | ||||||
|         // You can update the following values to match your application needs. |  | ||||||
|         // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. |  | ||||||
|         minSdkVersion flutter.minSdkVersion |  | ||||||
|         targetSdkVersion flutter.targetSdkVersion |  | ||||||
|         versionCode flutterVersionCode.toInteger() |  | ||||||
|         versionName flutterVersionName |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     buildTypes { |  | ||||||
|         release { |  | ||||||
|             // TODO: Add your own signing config for the release build. |  | ||||||
|             // Signing with the debug keys for now, so `flutter run --release` works. |  | ||||||
|             signingConfig signingConfigs.debug |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| flutter { |  | ||||||
|     source '../..' |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| dependencies { |  | ||||||
|     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" |  | ||||||
| } |  | ||||||
| @ -1,8 +0,0 @@ | |||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     package="com.example.wyatt_feature_brick"> |  | ||||||
|     <!-- The INTERNET permission is required for development. Specifically, |  | ||||||
|          the Flutter tool needs it to communicate with the running application |  | ||||||
|          to allow setting breakpoints, to provide hot reload, etc. |  | ||||||
|     --> |  | ||||||
|     <uses-permission android:name="android.permission.INTERNET"/> |  | ||||||
| </manifest> |  | ||||||
| @ -1,34 +0,0 @@ | |||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     package="com.example.wyatt_feature_brick"> |  | ||||||
|    <application |  | ||||||
|         android:label="wyatt_feature_brick" |  | ||||||
|         android:name="${applicationName}" |  | ||||||
|         android:icon="@mipmap/ic_launcher"> |  | ||||||
|         <activity |  | ||||||
|             android:name=".MainActivity" |  | ||||||
|             android:exported="true" |  | ||||||
|             android:launchMode="singleTop" |  | ||||||
|             android:theme="@style/LaunchTheme" |  | ||||||
|             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" |  | ||||||
|             android:hardwareAccelerated="true" |  | ||||||
|             android:windowSoftInputMode="adjustResize"> |  | ||||||
|             <!-- Specifies an Android theme to apply to this Activity as soon as |  | ||||||
|                  the Android process has started. This theme is visible to the user |  | ||||||
|                  while the Flutter UI initializes. After that, this theme continues |  | ||||||
|                  to determine the Window background behind the Flutter UI. --> |  | ||||||
|             <meta-data |  | ||||||
|               android:name="io.flutter.embedding.android.NormalTheme" |  | ||||||
|               android:resource="@style/NormalTheme" |  | ||||||
|               /> |  | ||||||
|             <intent-filter> |  | ||||||
|                 <action android:name="android.intent.action.MAIN"/> |  | ||||||
|                 <category android:name="android.intent.category.LAUNCHER"/> |  | ||||||
|             </intent-filter> |  | ||||||
|         </activity> |  | ||||||
|         <!-- Don't delete the meta-data below. |  | ||||||
|              This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> |  | ||||||
|         <meta-data |  | ||||||
|             android:name="flutterEmbedding" |  | ||||||
|             android:value="2" /> |  | ||||||
|     </application> |  | ||||||
| </manifest> |  | ||||||
| @ -1,6 +0,0 @@ | |||||||
| package com.example.wyatt_feature_brick |  | ||||||
| 
 |  | ||||||
| import io.flutter.embedding.android.FlutterActivity |  | ||||||
| 
 |  | ||||||
| class MainActivity: FlutterActivity() { |  | ||||||
| } |  | ||||||
| @ -1,12 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <!-- Modify this file to customize your launch splash screen --> |  | ||||||
| <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> |  | ||||||
|     <item android:drawable="?android:colorBackground" /> |  | ||||||
| 
 |  | ||||||
|     <!-- You can insert your own image assets here --> |  | ||||||
|     <!-- <item> |  | ||||||
|         <bitmap |  | ||||||
|             android:gravity="center" |  | ||||||
|             android:src="@mipmap/launch_image" /> |  | ||||||
|     </item> --> |  | ||||||
| </layer-list> |  | ||||||
| @ -1,12 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <!-- Modify this file to customize your launch splash screen --> |  | ||||||
| <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> |  | ||||||
|     <item android:drawable="@android:color/white" /> |  | ||||||
| 
 |  | ||||||
|     <!-- You can insert your own image assets here --> |  | ||||||
|     <!-- <item> |  | ||||||
|         <bitmap |  | ||||||
|             android:gravity="center" |  | ||||||
|             android:src="@mipmap/launch_image" /> |  | ||||||
|     </item> --> |  | ||||||
| </layer-list> |  | ||||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 544 B | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 442 B | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 721 B | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 1.0 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 1.4 KiB | 
| @ -1,18 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <resources> |  | ||||||
|     <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on --> |  | ||||||
|     <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> |  | ||||||
|         <!-- Show a splash screen on the activity. Automatically removed when |  | ||||||
|              the Flutter engine draws its first frame --> |  | ||||||
|         <item name="android:windowBackground">@drawable/launch_background</item> |  | ||||||
|     </style> |  | ||||||
|     <!-- Theme applied to the Android Window as soon as the process has started. |  | ||||||
|          This theme determines the color of the Android Window while your |  | ||||||
|          Flutter UI initializes, as well as behind your Flutter UI while its |  | ||||||
|          running. |  | ||||||
| 
 |  | ||||||
|          This Theme is only used starting with V2 of Flutter's Android embedding. --> |  | ||||||
|     <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar"> |  | ||||||
|         <item name="android:windowBackground">?android:colorBackground</item> |  | ||||||
|     </style> |  | ||||||
| </resources> |  | ||||||
| @ -1,18 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <resources> |  | ||||||
|     <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off --> |  | ||||||
|     <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar"> |  | ||||||
|         <!-- Show a splash screen on the activity. Automatically removed when |  | ||||||
|              the Flutter engine draws its first frame --> |  | ||||||
|         <item name="android:windowBackground">@drawable/launch_background</item> |  | ||||||
|     </style> |  | ||||||
|     <!-- Theme applied to the Android Window as soon as the process has started. |  | ||||||
|          This theme determines the color of the Android Window while your |  | ||||||
|          Flutter UI initializes, as well as behind your Flutter UI while its |  | ||||||
|          running. |  | ||||||
| 
 |  | ||||||
|          This Theme is only used starting with V2 of Flutter's Android embedding. --> |  | ||||||
|     <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar"> |  | ||||||
|         <item name="android:windowBackground">?android:colorBackground</item> |  | ||||||
|     </style> |  | ||||||
| </resources> |  | ||||||
| @ -1,8 +0,0 @@ | |||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     package="com.example.wyatt_feature_brick"> |  | ||||||
|     <!-- The INTERNET permission is required for development. Specifically, |  | ||||||
|          the Flutter tool needs it to communicate with the running application |  | ||||||
|          to allow setting breakpoints, to provide hot reload, etc. |  | ||||||
|     --> |  | ||||||
|     <uses-permission android:name="android.permission.INTERNET"/> |  | ||||||
| </manifest> |  | ||||||
| @ -1,31 +0,0 @@ | |||||||
| buildscript { |  | ||||||
|     ext.kotlin_version = '1.6.10' |  | ||||||
|     repositories { |  | ||||||
|         google() |  | ||||||
|         mavenCentral() |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     dependencies { |  | ||||||
|         classpath 'com.android.tools.build:gradle:7.1.2' |  | ||||||
|         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| allprojects { |  | ||||||
|     repositories { |  | ||||||
|         google() |  | ||||||
|         mavenCentral() |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| rootProject.buildDir = '../build' |  | ||||||
| subprojects { |  | ||||||
|     project.buildDir = "${rootProject.buildDir}/${project.name}" |  | ||||||
| } |  | ||||||
| subprojects { |  | ||||||
|     project.evaluationDependsOn(':app') |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| task clean(type: Delete) { |  | ||||||
|     delete rootProject.buildDir |  | ||||||
| } |  | ||||||
| @ -1,3 +0,0 @@ | |||||||
| org.gradle.jvmargs=-Xmx1536M |  | ||||||
| android.useAndroidX=true |  | ||||||
| android.enableJetifier=true |  | ||||||
| @ -1,6 +0,0 @@ | |||||||
| #Fri Jun 23 08:50:38 CEST 2017 |  | ||||||
| distributionBase=GRADLE_USER_HOME |  | ||||||
| distributionPath=wrapper/dists |  | ||||||
| zipStoreBase=GRADLE_USER_HOME |  | ||||||
| zipStorePath=wrapper/dists |  | ||||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip |  | ||||||
| @ -1,11 +0,0 @@ | |||||||
| include ':app' |  | ||||||
| 
 |  | ||||||
| def localPropertiesFile = new File(rootProject.projectDir, "local.properties") |  | ||||||
| def properties = new Properties() |  | ||||||
| 
 |  | ||||||
| assert localPropertiesFile.exists() |  | ||||||
| localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } |  | ||||||
| 
 |  | ||||||
| def flutterSdkPath = properties.getProperty("flutter.sdk") |  | ||||||
| assert flutterSdkPath != null, "flutter.sdk not set in local.properties" |  | ||||||
| apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" |  | ||||||
| @ -1,20 +1,13 @@ | |||||||
| brick_name: wyatt_feature_brick | name: wyatt_feature_brick | ||||||
| 
 | description: New feature brick including state mananement | ||||||
| path_to_brickify: lib/feature_name | path_to_brickify: lib/feature_name | ||||||
| 
 | 
 | ||||||
| variables: | version: 0.1.1 | ||||||
|  | 
 | ||||||
|  | vars: | ||||||
|   feature_name: |   feature_name: | ||||||
|     variable_name: feature_name |  | ||||||
|     type: string |     type: string | ||||||
|     syntax: |     name: feature_name | ||||||
|       camel_case: featureName |     description: Name of the feature | ||||||
|       constant_case: FEATURE_NAME |     default: Dash | ||||||
|       dot_case: feature.name |     prompt: What is the name of your new feature | ||||||
|       header_case: Feature-Name |  | ||||||
|       lower_case: feature name |  | ||||||
|       pascal_case: FeatureName |  | ||||||
|       param_case: feature-name |  | ||||||
|       sentence_case: Feature name |  | ||||||
|       title_case: Feature Name |  | ||||||
|       upper_case: FEATURE NAME |  | ||||||
|       snake_case: feature_name |  | ||||||
| @ -6,7 +6,11 @@ import 'package:flutter_bloc/flutter_bloc.dart'; | |||||||
| part 'feature_name_event.dart'; | part 'feature_name_event.dart'; | ||||||
| part 'feature_name_state.dart'; | part 'feature_name_state.dart'; | ||||||
| 
 | 
 | ||||||
|  | /// {@template feature_name_bloc} | ||||||
|  | /// FeatureNameBloc description | ||||||
|  | /// {@endtemplate} | ||||||
| class FeatureNameBloc extends Bloc<FeatureNameEvent, FeatureNameState> { | class FeatureNameBloc extends Bloc<FeatureNameEvent, FeatureNameState> { | ||||||
|  |   /// {@macro feature_name_bloc} | ||||||
|   FeatureNameBloc() : super(const FeatureNameInitial()) { |   FeatureNameBloc() : super(const FeatureNameInitial()) { | ||||||
|     on<CustomFeatureNameEvent>(_onCustomFeatureNameEvent); |     on<CustomFeatureNameEvent>(_onCustomFeatureNameEvent); | ||||||
|   } |   } | ||||||
| @ -14,7 +18,9 @@ class FeatureNameBloc extends Bloc<FeatureNameEvent, FeatureNameState> { | |||||||
|   FutureOr<void> _onCustomFeatureNameEvent( |   FutureOr<void> _onCustomFeatureNameEvent( | ||||||
|     CustomFeatureNameEvent event, |     CustomFeatureNameEvent event, | ||||||
|     Emitter<FeatureNameState> emit, |     Emitter<FeatureNameState> emit, | ||||||
|   ) { |   ) async { | ||||||
|     // TODO(wyattstudio): Add Logic |     // TODO(wyatt): Add custom UI logic | ||||||
|  |     const _ = 1 + 1; | ||||||
|  |     return; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @ -1,6 +1,10 @@ | |||||||
| part of 'feature_name_bloc.dart'; | part of 'feature_name_bloc.dart'; | ||||||
| 
 | 
 | ||||||
|  | /// {@template feature_name_event} | ||||||
|  | /// FeatureNameEvent description | ||||||
|  | /// {@endtemplate} | ||||||
| abstract class FeatureNameEvent extends Equatable { | abstract class FeatureNameEvent extends Equatable { | ||||||
|  |   /// {@macro feature_name_event} | ||||||
|   const FeatureNameEvent(); |   const FeatureNameEvent(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -5,11 +5,17 @@ import 'package:flutter_bloc/flutter_bloc.dart'; | |||||||
| 
 | 
 | ||||||
| part 'feature_name_state.dart'; | part 'feature_name_state.dart'; | ||||||
| 
 | 
 | ||||||
|  | /// {@template feature_name_cubit} | ||||||
|  | /// FeatureNameCubit description | ||||||
|  | /// {@endtemplate} | ||||||
| class FeatureNameCubit extends Cubit<FeatureNameState> { | class FeatureNameCubit extends Cubit<FeatureNameState> { | ||||||
|  |   /// {@macro feature_name_cubit} | ||||||
|   FeatureNameCubit() : super(const FeatureNameInitial()); |   FeatureNameCubit() : super(const FeatureNameInitial()); | ||||||
| 
 | 
 | ||||||
|   /// A description for yourCustomFunction |   /// A description for yourCustomFunction | ||||||
|   FutureOr<void> yourCustomFunction() { |   FutureOr<void> yourCustomFunction() async { | ||||||
|     // TODO(wyattstudio): Add Logic |     // TODO(wyatt): Add custom UI logic | ||||||
|  |     const _ = 1 + 1; | ||||||
|  |     return; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @ -1 +1,2 @@ | |||||||
| export './state_management/feature_name_state_management.dart'; | export 'screens/feature_name_provider.dart'; | ||||||
|  | export 'screens/feature_name_screen.dart'; | ||||||
|  | |||||||
| @ -0,0 +1,15 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | 
 | ||||||
|  | class FeatureNameParent extends StatelessWidget { | ||||||
|  |   const FeatureNameParent({ | ||||||
|  |     required this.child, | ||||||
|  |     super.key, | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   final Widget child; | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) => Scaffold( | ||||||
|  |         body: SafeArea(child: child), | ||||||
|  |       ); | ||||||
|  | } | ||||||
| @ -0,0 +1,22 @@ | |||||||
|  | // ignore_for_file: always_use_package_imports | ||||||
|  | 
 | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; | ||||||
|  | 
 | ||||||
|  | import '../blocs/feature_name_cubit/feature_name_cubit.dart'; | ||||||
|  | import 'widgets/feature_name_consumer_widget.dart'; | ||||||
|  | 
 | ||||||
|  | /// {@template feature_name_provider} | ||||||
|  | /// FeatureNameProvider provides bloc to his children. | ||||||
|  | /// {@endtemplate} | ||||||
|  | class FeatureNameProvider | ||||||
|  |     extends CubitProviderScreen<FeatureNameCubit, FeatureNameState> { | ||||||
|  |   /// {@macro feature_name_provider} | ||||||
|  |   const FeatureNameProvider({super.key}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   FeatureNameCubit create(BuildContext context) => FeatureNameCubit(); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget builder(BuildContext context) => const FeatureNameConsumerWidget(); | ||||||
|  | } | ||||||
| @ -0,0 +1,33 @@ | |||||||
|  | // ignore_for_file: always_use_package_imports | ||||||
|  | 
 | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; | ||||||
|  | 
 | ||||||
|  | import '../blocs/feature_name_cubit/feature_name_cubit.dart'; | ||||||
|  | import '../stateless/feature_name_widget.dart'; | ||||||
|  | import 'feature_name_parent.dart'; | ||||||
|  | 
 | ||||||
|  | /// {@template feature_name_screen} | ||||||
|  | /// FeatureNameScreen is the merge of Provider and Consumer. | ||||||
|  | /// {@endtemplate} | ||||||
|  | class FeatureNameScreen | ||||||
|  |     extends CubitScreen<FeatureNameCubit, FeatureNameState> { | ||||||
|  |   /// {@macro feature_name_screen} | ||||||
|  |   const FeatureNameScreen({super.key}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   FeatureNameCubit create(BuildContext context) => FeatureNameCubit(); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   FeatureNameCubit init(BuildContext context, FeatureNameCubit bloc) => | ||||||
|  |       bloc..yourCustomFunction(); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget parent(BuildContext context, Widget child) => | ||||||
|  |       FeatureNameParent(child: child); | ||||||
|  | 
 | ||||||
|  |   // Rebuild on every bloc changes | ||||||
|  |   @override | ||||||
|  |   Widget onBuild(BuildContext context, FeatureNameState state) => | ||||||
|  |       const FeatureNameWidget(); | ||||||
|  | } | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | // ignore_for_file: always_use_package_imports | ||||||
|  | 
 | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; | ||||||
|  | 
 | ||||||
|  | import '../../blocs/feature_name_cubit/feature_name_cubit.dart'; | ||||||
|  | 
 | ||||||
|  | /// {@template feature_name_consumer_widget} | ||||||
|  | /// FeatureNameConsumerWidget is a stateful widget. Aware of state changes. | ||||||
|  | /// {@endtemplate} | ||||||
|  | class FeatureNameConsumerWidget | ||||||
|  |     extends CubitConsumerScreen<FeatureNameCubit, FeatureNameState> { | ||||||
|  |   /// {@macro feature_name_sf_widget} | ||||||
|  |   const FeatureNameConsumerWidget({super.key}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget onBuild(BuildContext context, FeatureNameState state) => Container(); | ||||||
|  | } | ||||||
| @ -1,25 +0,0 @@ | |||||||
| import 'package:flutter/material.dart'; |  | ||||||
| import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; |  | ||||||
| 
 |  | ||||||
| // ignore: always_use_package_imports |  | ||||||
| import './feature_name_wrapper_widget.dart'; |  | ||||||
| // ignore: always_use_package_imports |  | ||||||
| import './widgets/feature_name_widget.dart'; |  | ||||||
| // ignore: always_use_package_imports |  | ||||||
| import '../cubit/feature_name_cubit.dart'; |  | ||||||
| 
 |  | ||||||
| class FeatureNameCubitStateManagement |  | ||||||
|     extends CubitScreen<FeatureNameCubit, FeatureNameState> { |  | ||||||
|   const FeatureNameCubitStateManagement({super.key}); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   FeatureNameCubit create(BuildContext context) => FeatureNameCubit(); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Widget onWrap(BuildContext context, Widget child) => |  | ||||||
|       FeatureNameWrapperWidget(child: child); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Widget onBuild(BuildContext context, FeatureNameState state) => |  | ||||||
|       const FeatureNameWidget(); |  | ||||||
| } |  | ||||||
| @ -1,14 +0,0 @@ | |||||||
| import 'package:flutter/material.dart'; |  | ||||||
| 
 |  | ||||||
| class FeatureNameWrapperWidget extends StatelessWidget { |  | ||||||
|   final Widget child; |  | ||||||
|   const FeatureNameWrapperWidget({ |  | ||||||
|     required this.child, |  | ||||||
|     super.key, |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Widget build(BuildContext context) => Container( |  | ||||||
|         child: child, |  | ||||||
|       ); |  | ||||||
| } |  | ||||||
| @ -1,8 +0,0 @@ | |||||||
| import 'package:flutter/material.dart'; |  | ||||||
| 
 |  | ||||||
| class FeatureNameWidget extends StatelessWidget { |  | ||||||
|   const FeatureNameWidget({super.key}); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Widget build(BuildContext context) => const SizedBox(); |  | ||||||
| } |  | ||||||
| @ -0,0 +1,12 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | 
 | ||||||
|  | /// {@template feature_name_widget} | ||||||
|  | /// FeatureNameWidget is a stateless widget. (Not aware of cubit or bloc states) | ||||||
|  | /// {@endtemplate} | ||||||
|  | class FeatureNameWidget extends StatelessWidget { | ||||||
|  |   /// {@macro feature_name_widget} | ||||||
|  |   const FeatureNameWidget({super.key}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) => Container(); | ||||||
|  | } | ||||||
| @ -1,99 +1,33 @@ | |||||||
| name: wyatt_feature_brick | name: wyatt_feature_brick | ||||||
| description: A new Flutter project. | description: A new Flutter project. | ||||||
| 
 |  | ||||||
| # The following line prevents the package from being accidentally published to |  | ||||||
| # pub.dev using `flutter pub publish`. This is preferred for private packages. |  | ||||||
| publish_to: "none" # Remove this line if you wish to publish to pub.dev |  | ||||||
| 
 |  | ||||||
| # The following defines the version and build number for your application. |  | ||||||
| # A version number is three numbers separated by dots, like 1.2.43 |  | ||||||
| # followed by an optional build number separated by a +. |  | ||||||
| # Both the version and the builder number may be overridden in flutter |  | ||||||
| # build by specifying --build-name and --build-number, respectively. |  | ||||||
| # In Android, build-name is used as versionName while build-number used as versionCode. |  | ||||||
| # Read more about Android versioning at https://developer.android.com/studio/publish/versioning |  | ||||||
| # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. |  | ||||||
| # Read more about iOS versioning at |  | ||||||
| # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html |  | ||||||
| version: 1.0.0+1 | version: 1.0.0+1 | ||||||
| 
 | 
 | ||||||
|  | publish_to: "none" | ||||||
|  | 
 | ||||||
| environment: | environment: | ||||||
|   sdk: ">=2.17.6 <3.0.0" |   sdk: ">=2.18.0 <3.0.0" | ||||||
| 
 | 
 | ||||||
| # Dependencies specify other packages that your package needs in order to work. |  | ||||||
| # To automatically upgrade your package dependencies to the latest versions |  | ||||||
| # consider running `flutter pub upgrade --major-versions`. Alternatively, |  | ||||||
| # dependencies can be manually updated by changing the version numbers below to |  | ||||||
| # the latest version available on pub.dev. To see which dependencies have newer |  | ||||||
| # versions available, run `flutter pub outdated`. |  | ||||||
| dependencies: | dependencies: | ||||||
|   flutter: |   flutter: { sdk: flutter } | ||||||
|     sdk: flutter |  | ||||||
| 
 | 
 | ||||||
|   # The following adds the Cupertino Icons font to your application. |  | ||||||
|   # Use with the CupertinoIcons class for iOS style icons. |  | ||||||
|   cupertino_icons: ^1.0.2 |   cupertino_icons: ^1.0.2 | ||||||
|   flutter_bloc: ^8.0.1 |   flutter_bloc: ^8.0.1 | ||||||
|   equatable: ^2.0.3 |   equatable: ^2.0.3 | ||||||
|  | 
 | ||||||
|   wyatt_bloc_helper: |   wyatt_bloc_helper: | ||||||
|     git: |     hosted: | ||||||
|       url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages |       url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ | ||||||
|       ref: bloc/feature/fix_and_repo |       name: wyatt_bloc_helper | ||||||
|       path: packages/wyatt_bloc_helper |     version: 2.0.0 | ||||||
| 
 | 
 | ||||||
| dev_dependencies: | dev_dependencies: | ||||||
|   flutter_test: |   flutter_test: { sdk: flutter } | ||||||
|     sdk: flutter | 
 | ||||||
|   wyatt_analysis: |   wyatt_analysis: | ||||||
|     git: |     hosted: | ||||||
|       url: https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages |       url: https://git.wyatt-studio.fr/api/packages/Wyatt-FOSS/pub/ | ||||||
|       ref: wyatt_analysis-v2.1.0 |       name: wyatt_analysis | ||||||
|       path: packages/wyatt_analysis |     version: 2.3.0 | ||||||
| 
 | 
 | ||||||
|   # The "flutter_lints" package below contains a set of recommended lints to |  | ||||||
|   # encourage good coding practices. The lint set provided by the package is |  | ||||||
|   # activated in the `analysis_options.yaml` file located at the root of your |  | ||||||
|   # package. See that file for information about deactivating specific lint |  | ||||||
|   # rules and activating additional ones. |  | ||||||
|   flutter_lints: ^2.0.0 |  | ||||||
| 
 |  | ||||||
| # For information on the generic Dart part of this file, see the |  | ||||||
| # following page: https://dart.dev/tools/pub/pubspec |  | ||||||
| 
 |  | ||||||
| # The following section is specific to Flutter packages. |  | ||||||
| flutter: | flutter: | ||||||
|   # The following line ensures that the Material Icons font is |  | ||||||
|   # included with your application, so that you can use the icons in |  | ||||||
|   # the material Icons class. |  | ||||||
|   uses-material-design: true |   uses-material-design: true | ||||||
| 
 |  | ||||||
|   # To add assets to your application, add an assets section, like this: |  | ||||||
|   # assets: |  | ||||||
|   #   - images/a_dot_burr.jpeg |  | ||||||
|   #   - images/a_dot_ham.jpeg |  | ||||||
| 
 |  | ||||||
|   # An image asset can refer to one or more resolution-specific "variants", see |  | ||||||
|   # https://flutter.dev/assets-and-images/#resolution-aware |  | ||||||
| 
 |  | ||||||
|   # For details regarding adding assets from package dependencies, see |  | ||||||
|   # https://flutter.dev/assets-and-images/#from-packages |  | ||||||
| 
 |  | ||||||
|   # To add custom fonts to your application, add a fonts section here, |  | ||||||
|   # in this "flutter" section. Each entry in this list should have a |  | ||||||
|   # "family" key with the font family name, and a "fonts" key with a |  | ||||||
|   # list giving the asset and other descriptors for the font. For |  | ||||||
|   # example: |  | ||||||
|   # fonts: |  | ||||||
|   #   - family: Schyler |  | ||||||
|   #     fonts: |  | ||||||
|   #       - asset: fonts/Schyler-Regular.ttf |  | ||||||
|   #       - asset: fonts/Schyler-Italic.ttf |  | ||||||
|   #         style: italic |  | ||||||
|   #   - family: Trajan Pro |  | ||||||
|   #     fonts: |  | ||||||
|   #       - asset: fonts/TrajanPro.ttf |  | ||||||
|   #       - asset: fonts/TrajanPro_Bold.ttf |  | ||||||
|   #         weight: 700 |  | ||||||
|   # |  | ||||||
|   # For details regarding fonts from package dependencies, |  | ||||||
|   # see https://flutter.dev/custom-fonts/#from-packages |  | ||||||
|  | |||||||
| @ -1,30 +0,0 @@ | |||||||
| // This is a basic Flutter widget test. |  | ||||||
| // |  | ||||||
| // To perform an interaction with a widget in your test, use the WidgetTester |  | ||||||
| // utility in the flutter_test package. For example, you can send tap and scroll |  | ||||||
| // gestures. You can also use WidgetTester to find child widgets in the widget |  | ||||||
| // tree, read text, and verify that the values of widget properties are correct. |  | ||||||
| 
 |  | ||||||
| import 'package:flutter/material.dart'; |  | ||||||
| import 'package:flutter_test/flutter_test.dart'; |  | ||||||
| 
 |  | ||||||
| import 'package:wyatt_feature_brick/main.dart'; |  | ||||||
| 
 |  | ||||||
| void main() { |  | ||||||
|   testWidgets('Counter increments smoke test', (WidgetTester tester) async { |  | ||||||
|     // Build our app and trigger a frame. |  | ||||||
|     await tester.pumpWidget(const MyApp()); |  | ||||||
| 
 |  | ||||||
|     // Verify that our counter starts at 0. |  | ||||||
|     expect(find.text('0'), findsOneWidget); |  | ||||||
|     expect(find.text('1'), findsNothing); |  | ||||||
| 
 |  | ||||||
|     // Tap the '+' icon and trigger a frame. |  | ||||||
|     await tester.tap(find.byIcon(Icons.add)); |  | ||||||
|     await tester.pump(); |  | ||||||
| 
 |  | ||||||
|     // Verify that our counter has incremented. |  | ||||||
|     expect(find.text('0'), findsNothing); |  | ||||||
|     expect(find.text('1'), findsOneWidget); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| @ -1,3 +0,0 @@ | |||||||
| # 0.1.0+1 |  | ||||||
| 
 |  | ||||||
| - TODO: Describe initial release. |  | ||||||
| @ -1 +0,0 @@ | |||||||
| TODO: Add your license here. |  | ||||||
| @ -2,15 +2,12 @@ | |||||||
| 
 | 
 | ||||||
| [](https://github.com/felangel/mason) | [](https://github.com/felangel/mason) | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| A brick to create a feature using best practices and your state management of choice! Supports Bloc & Cubit. | A brick to create a feature using best practices and your state management of choice! Supports Bloc & Cubit. | ||||||
| 
 | 
 | ||||||
| ## How to use 🚀 | ## How to use 🚀 | ||||||
| 
 | 
 | ||||||
| ``` | ``` | ||||||
| mason make feature_brick --feature_name audit --state_management cubit --use_equatable true | mason make feature_brick --feature_name audit | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ## Variables ✨ | ## Variables ✨ | ||||||
| @ -22,25 +19,34 @@ mason make feature_brick --feature_name audit --state_management cubit --use_equ | |||||||
| 
 | 
 | ||||||
| ## Outputs 📦 | ## Outputs 📦 | ||||||
| 
 | 
 | ||||||
| ### Using Bloc |  | ||||||
| 
 |  | ||||||
| ```shell | ```shell | ||||||
| --feature_name login --state_management bloc | --feature_name feature | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ``` | ``` | ||||||
| ├── feature | ├── feature | ||||||
| │   ├── blocs | │   ├── blocs | ||||||
| |   |   └── feature_bloc | │   │   ├── feature_bloc | ||||||
| │   │       ├── feature_bloc.dart | │   │   │   ├── feature_bloc.dart | ||||||
| │   │       ├── feature_event.dart | │   │   │   ├── feature_event.dart | ||||||
|  | │   │   │   └── feature_state.dart | ||||||
|  | │   │   └── feature_cubit | ||||||
|  | │   │       ├── feature_cubit.dart | ||||||
| │   │       └── feature_state.dart | │   │       └── feature_state.dart | ||||||
| │   ├── state_management | │   ├── screens | ||||||
| |   |   └── ... | │   │   ├── widgets | ||||||
|  | │   │   │   └── feature_consumer_widget.dart | ||||||
|  | │   │   ├── feature_parent.dart | ||||||
|  | │   │   ├── feature_provider.dart | ||||||
|  | │   │   └── feature_screen.dart | ||||||
|  | │   ├── stateless | ||||||
|  | │   │   └── feature_widget.dart | ||||||
| │   └── feature.dart | │   └── feature.dart | ||||||
| └── ... | └── ... | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | ## Using BLoC | ||||||
|  | 
 | ||||||
| - {{featureName}}_bloc.dart | - {{featureName}}_bloc.dart | ||||||
| 
 | 
 | ||||||
| ```dart | ```dart | ||||||
|  | |||||||
| @ -6,7 +6,11 @@ import 'package:flutter_bloc/flutter_bloc.dart'; | |||||||
| part '{{#snakeCase}}{{feature_name}}{{/snakeCase}}_event.dart'; | part '{{#snakeCase}}{{feature_name}}{{/snakeCase}}_event.dart'; | ||||||
| part '{{#snakeCase}}{{feature_name}}{{/snakeCase}}_state.dart'; | part '{{#snakeCase}}{{feature_name}}{{/snakeCase}}_state.dart'; | ||||||
| 
 | 
 | ||||||
|  | /// {@template {{#snakeCase}}{{feature_name}}{{/snakeCase}}_bloc} | ||||||
|  | /// {{#pascalCase}}{{feature_name}}{{/pascalCase}}Bloc description | ||||||
|  | /// {@endtemplate} | ||||||
| class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Bloc extends Bloc<{{#pascalCase}}{{feature_name}}{{/pascalCase}}Event, {{#pascalCase}}{{feature_name}}{{/pascalCase}}State> { | class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Bloc extends Bloc<{{#pascalCase}}{{feature_name}}{{/pascalCase}}Event, {{#pascalCase}}{{feature_name}}{{/pascalCase}}State> { | ||||||
|  |   /// {@macro {{#snakeCase}}{{feature_name}}{{/snakeCase}}_bloc} | ||||||
|   {{#pascalCase}}{{feature_name}}{{/pascalCase}}Bloc() : super(const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Initial()) { |   {{#pascalCase}}{{feature_name}}{{/pascalCase}}Bloc() : super(const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Initial()) { | ||||||
|     on<Custom{{#pascalCase}}{{feature_name}}{{/pascalCase}}Event>(_onCustom{{#pascalCase}}{{feature_name}}{{/pascalCase}}Event); |     on<Custom{{#pascalCase}}{{feature_name}}{{/pascalCase}}Event>(_onCustom{{#pascalCase}}{{feature_name}}{{/pascalCase}}Event); | ||||||
|   } |   } | ||||||
| @ -14,7 +18,9 @@ class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Bloc extends Bloc<{{#pascalC | |||||||
|   FutureOr<void> _onCustom{{#pascalCase}}{{feature_name}}{{/pascalCase}}Event( |   FutureOr<void> _onCustom{{#pascalCase}}{{feature_name}}{{/pascalCase}}Event( | ||||||
|     Custom{{#pascalCase}}{{feature_name}}{{/pascalCase}}Event event, |     Custom{{#pascalCase}}{{feature_name}}{{/pascalCase}}Event event, | ||||||
|     Emitter<{{#pascalCase}}{{feature_name}}{{/pascalCase}}State> emit, |     Emitter<{{#pascalCase}}{{feature_name}}{{/pascalCase}}State> emit, | ||||||
|   ) { |   ) async { | ||||||
|     // TODO(wyattstudio): Add Logic |     // TODO(wyatt): Add custom UI logic | ||||||
|  |     const _ = 1 + 1; | ||||||
|  |     return; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @ -1,6 +1,10 @@ | |||||||
| part of '{{#snakeCase}}{{feature_name}}{{/snakeCase}}_bloc.dart'; | part of '{{#snakeCase}}{{feature_name}}{{/snakeCase}}_bloc.dart'; | ||||||
| 
 | 
 | ||||||
|  | /// {@template {{#snakeCase}}{{feature_name}}{{/snakeCase}}_event} | ||||||
|  | /// {{#pascalCase}}{{feature_name}}{{/pascalCase}}Event description | ||||||
|  | /// {@endtemplate} | ||||||
| abstract class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Event extends Equatable { | abstract class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Event extends Equatable { | ||||||
|  |   /// {@macro {{#snakeCase}}{{feature_name}}{{/snakeCase}}_event} | ||||||
|   const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Event(); |   const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Event(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -5,11 +5,17 @@ import 'package:flutter_bloc/flutter_bloc.dart'; | |||||||
| 
 | 
 | ||||||
| part '{{#snakeCase}}{{feature_name}}{{/snakeCase}}_state.dart'; | part '{{#snakeCase}}{{feature_name}}{{/snakeCase}}_state.dart'; | ||||||
| 
 | 
 | ||||||
|  | /// {@template {{#snakeCase}}{{feature_name}}{{/snakeCase}}_cubit} | ||||||
|  | /// {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit description | ||||||
|  | /// {@endtemplate} | ||||||
| class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit extends Cubit<{{#pascalCase}}{{feature_name}}{{/pascalCase}}State> { | class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit extends Cubit<{{#pascalCase}}{{feature_name}}{{/pascalCase}}State> { | ||||||
|  |   /// {@macro {{#snakeCase}}{{feature_name}}{{/snakeCase}}_cubit} | ||||||
|   {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit() : super(const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Initial()); |   {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit() : super(const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Initial()); | ||||||
| 
 | 
 | ||||||
|   /// A description for yourCustomFunction |   /// A description for yourCustomFunction | ||||||
|   FutureOr<void> yourCustomFunction() { |   FutureOr<void> yourCustomFunction() async { | ||||||
|     // TODO(wyattstudio): Add Logic |     // TODO(wyatt): Add custom UI logic | ||||||
|  |     const _ = 1 + 1; | ||||||
|  |     return; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | // ignore_for_file: always_use_package_imports | ||||||
|  | 
 | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; | ||||||
|  | 
 | ||||||
|  | import '../../blocs/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_cubit/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_cubit.dart'; | ||||||
|  | 
 | ||||||
|  | /// {@template {{#snakeCase}}{{feature_name}}{{/snakeCase}}_consumer_widget} | ||||||
|  | /// {{#pascalCase}}{{feature_name}}{{/pascalCase}}ConsumerWidget is a stateful widget. Aware of state changes. | ||||||
|  | /// {@endtemplate} | ||||||
|  | class {{#pascalCase}}{{feature_name}}{{/pascalCase}}ConsumerWidget | ||||||
|  |     extends CubitConsumerScreen<{{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit, {{#pascalCase}}{{feature_name}}{{/pascalCase}}State> { | ||||||
|  |   /// {@macro {{#snakeCase}}{{feature_name}}{{/snakeCase}}_sf_widget} | ||||||
|  |   const {{#pascalCase}}{{feature_name}}{{/pascalCase}}ConsumerWidget({super.key}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget onBuild(BuildContext context, {{#pascalCase}}{{feature_name}}{{/pascalCase}}State state) => Container(); | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | 
 | ||||||
|  | class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Parent extends StatelessWidget { | ||||||
|  |   const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Parent({ | ||||||
|  |     required this.child, | ||||||
|  |     super.key, | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   final Widget child; | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) => Scaffold( | ||||||
|  |         body: SafeArea(child: child), | ||||||
|  |       ); | ||||||
|  | } | ||||||
| @ -0,0 +1,22 @@ | |||||||
|  | // ignore_for_file: always_use_package_imports | ||||||
|  | 
 | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; | ||||||
|  | 
 | ||||||
|  | import '../blocs/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_cubit/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_cubit.dart'; | ||||||
|  | import 'widgets/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_consumer_widget.dart'; | ||||||
|  | 
 | ||||||
|  | /// {@template {{#snakeCase}}{{feature_name}}{{/snakeCase}}_provider} | ||||||
|  | /// {{#pascalCase}}{{feature_name}}{{/pascalCase}}Provider provides bloc to his children. | ||||||
|  | /// {@endtemplate} | ||||||
|  | class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Provider | ||||||
|  |     extends CubitProviderScreen<{{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit, {{#pascalCase}}{{feature_name}}{{/pascalCase}}State> { | ||||||
|  |   /// {@macro {{#snakeCase}}{{feature_name}}{{/snakeCase}}_provider} | ||||||
|  |   const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Provider({super.key}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit create(BuildContext context) => {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit(); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget builder(BuildContext context) => const {{#pascalCase}}{{feature_name}}{{/pascalCase}}ConsumerWidget(); | ||||||
|  | } | ||||||
| @ -0,0 +1,33 @@ | |||||||
|  | // ignore_for_file: always_use_package_imports | ||||||
|  | 
 | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; | ||||||
|  | 
 | ||||||
|  | import '../blocs/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_cubit/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_cubit.dart'; | ||||||
|  | import '../stateless/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_widget.dart'; | ||||||
|  | import '{{#snakeCase}}{{feature_name}}{{/snakeCase}}_parent.dart'; | ||||||
|  | 
 | ||||||
|  | /// {@template {{#snakeCase}}{{feature_name}}{{/snakeCase}}_screen} | ||||||
|  | /// {{#pascalCase}}{{feature_name}}{{/pascalCase}}Screen is the merge of Provider and Consumer. | ||||||
|  | /// {@endtemplate} | ||||||
|  | class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Screen | ||||||
|  |     extends CubitScreen<{{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit, {{#pascalCase}}{{feature_name}}{{/pascalCase}}State> { | ||||||
|  |   /// {@macro {{#snakeCase}}{{feature_name}}{{/snakeCase}}_screen} | ||||||
|  |   const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Screen({super.key}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit create(BuildContext context) => {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit(); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit init(BuildContext context, {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit bloc) => | ||||||
|  |       bloc..yourCustomFunction(); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget parent(BuildContext context, Widget child) => | ||||||
|  |       {{#pascalCase}}{{feature_name}}{{/pascalCase}}Parent(child: child); | ||||||
|  | 
 | ||||||
|  |   // Rebuild on every bloc changes | ||||||
|  |   @override | ||||||
|  |   Widget onBuild(BuildContext context, {{#pascalCase}}{{feature_name}}{{/pascalCase}}State state) => | ||||||
|  |       const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Widget(); | ||||||
|  | } | ||||||
| @ -1,8 +0,0 @@ | |||||||
| import 'package:flutter/material.dart'; |  | ||||||
| 
 |  | ||||||
| class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Widget extends StatelessWidget { |  | ||||||
|   const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Widget({super.key}); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Widget build(BuildContext context) => const SizedBox(); |  | ||||||
| } |  | ||||||
| @ -1,25 +0,0 @@ | |||||||
| import 'package:flutter/material.dart'; |  | ||||||
| import 'package:wyatt_bloc_helper/wyatt_bloc_helper.dart'; |  | ||||||
| 
 |  | ||||||
| // ignore: always_use_package_imports |  | ||||||
| import './{{#snakeCase}}{{feature_name}}{{/snakeCase}}_wrapper_widget.dart'; |  | ||||||
| // ignore: always_use_package_imports |  | ||||||
| import './widgets/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_widget.dart'; |  | ||||||
| // ignore: always_use_package_imports |  | ||||||
| import '../cubit/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_cubit.dart'; |  | ||||||
| 
 |  | ||||||
| class {{#pascalCase}}{{feature_name}}{{/pascalCase}}CubitStateManagement |  | ||||||
|     extends CubitScreen<{{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit, {{#pascalCase}}{{feature_name}}{{/pascalCase}}State> { |  | ||||||
|   const {{#pascalCase}}{{feature_name}}{{/pascalCase}}CubitStateManagement({super.key}); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit create(BuildContext context) => {{#pascalCase}}{{feature_name}}{{/pascalCase}}Cubit(); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Widget onWrap(BuildContext context, Widget child) => |  | ||||||
|       {{#pascalCase}}{{feature_name}}{{/pascalCase}}WrapperWidget(child: child); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Widget onBuild(BuildContext context, {{#pascalCase}}{{feature_name}}{{/pascalCase}}State state) => |  | ||||||
|       const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Widget(); |  | ||||||
| } |  | ||||||
| @ -1,14 +0,0 @@ | |||||||
| import 'package:flutter/material.dart'; |  | ||||||
| 
 |  | ||||||
| class {{#pascalCase}}{{feature_name}}{{/pascalCase}}WrapperWidget extends StatelessWidget { |  | ||||||
|   final Widget child; |  | ||||||
|   const {{#pascalCase}}{{feature_name}}{{/pascalCase}}WrapperWidget({ |  | ||||||
|     required this.child, |  | ||||||
|     super.key, |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Widget build(BuildContext context) => Container( |  | ||||||
|         child: child, |  | ||||||
|       ); |  | ||||||
| } |  | ||||||
| @ -0,0 +1,12 @@ | |||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | 
 | ||||||
|  | /// {@template {{#snakeCase}}{{feature_name}}{{/snakeCase}}_widget} | ||||||
|  | /// {{#pascalCase}}{{feature_name}}{{/pascalCase}}Widget is a stateless widget. (Not aware of cubit or bloc states) | ||||||
|  | /// {@endtemplate} | ||||||
|  | class {{#pascalCase}}{{feature_name}}{{/pascalCase}}Widget extends StatelessWidget { | ||||||
|  |   /// {@macro {{#snakeCase}}{{feature_name}}{{/snakeCase}}_widget} | ||||||
|  |   const {{#pascalCase}}{{feature_name}}{{/pascalCase}}Widget({super.key}); | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) => Container(); | ||||||
|  | } | ||||||
| @ -1 +1,2 @@ | |||||||
| export './state_management/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_state_management.dart'; | export 'screens/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_provider.dart'; | ||||||
|  | export 'screens/{{#snakeCase}}{{feature_name}}{{/snakeCase}}_screen.dart'; | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| name: wyatt_feature_brick | name: wyatt_feature_brick | ||||||
| description: new feature brick including state mananement | description: New feature brick including state mananement | ||||||
| 
 | 
 | ||||||
| version: 0.1.0+1 | version: 0.1.0+1 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user