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