diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart new file mode 100644 index 00000000..64223350 --- /dev/null +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.dart @@ -0,0 +1,14 @@ +import 'package:flutter/material.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; + +part 'custom_app_bar.g.dart'; + +@ComponentCopyWithExtension() +class CustomAppBar extends AppBarComponent with $CustomAppBarCWMixin { + const CustomAppBar({super.title}); + @override + Widget build(BuildContext context) => AppBar( + title: Text(title ?? 'Title'), + ); +} diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.g.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.g.dart new file mode 100644 index 00000000..4f4d5343 --- /dev/null +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_app_bar.g.dart @@ -0,0 +1,35 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'custom_app_bar.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $CustomAppBarCWProxyImpl implements $AppBarComponentCWProxy { + const $CustomAppBarCWProxyImpl(this._value); + final CustomAppBar _value; + @override + CustomAppBar title(String? title) => this(title: title); + @override + CustomAppBar leading(Widget? leading) => this(leading: leading); + @override + CustomAppBar actions(List? actions) => this(actions: actions); + @override + CustomAppBar key(Key? key) => this(key: key); + @override + CustomAppBar call({ + String? title, + Widget? leading, + List? actions, + Key? key, + }) => + CustomAppBar( + title: title ?? _value.title, + ); +} + +mixin $CustomAppBarCWMixin on Component { + $AppBarComponentCWProxy get copyWith => + $CustomAppBarCWProxyImpl(this as CustomAppBar); +} diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart new file mode 100644 index 00000000..5d16b5a5 --- /dev/null +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; + +part 'custom_bottom_bar.g.dart'; + +@ComponentCopyWithExtension() +class CustomBottomBar extends BottomNavigationBarComponent + with $CustomBottomBarCWMixin { + @override + Widget build(BuildContext context) => BottomNavigationBar( + items: [ + BottomNavigationBarItem( + icon: Icon( + Icons.e_mobiledata, + ), + label: 'Icon 1'), + BottomNavigationBarItem( + icon: Icon( + Icons.do_not_disturb_off, + ), + label: 'Icon 2'), + ], + backgroundColor: Colors.blue, + ); +} diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.g.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.g.dart new file mode 100644 index 00000000..68648c38 --- /dev/null +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_bottom_bar.g.dart @@ -0,0 +1,33 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'custom_bottom_bar.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $CustomBottomBarCWProxyImpl + implements $BottomNavigationBarComponentCWProxy { + const $CustomBottomBarCWProxyImpl(this._value); + final CustomBottomBar _value; + @override + CustomBottomBar onTap(void Function(BuildContext, int)? onTap) => + this(onTap: onTap); + @override + CustomBottomBar currentIndex(int? currentIndex) => + this(currentIndex: currentIndex); + @override + CustomBottomBar key(Key? key) => this(key: key); + @override + CustomBottomBar call({ + void Function(BuildContext, int)? onTap, + int? currentIndex, + Key? key, + }) => + CustomBottomBar(); +} + +mixin $CustomBottomBarCWMixin on Component { + $BottomNavigationBarComponentCWProxy get copyWith => + $CustomBottomBarCWProxyImpl(this as CustomBottomBar); +} diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart new file mode 100644 index 00000000..799214e3 --- /dev/null +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; + +part 'custom_error_widget.g.dart'; + +@ComponentCopyWithExtension() +class CustomErrorWidget extends ErrorWidgetComponent + with $CustomErrorWidgetCWMixin { + CustomErrorWidget({super.error}); + + @override + Widget build(BuildContext context) => ColoredBox( + color: Colors.red, + child: Center(child: Text(error ?? 'Error')), + ); +} diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.g.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.g.dart new file mode 100644 index 00000000..ed5b8c5b --- /dev/null +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_error_widget.g.dart @@ -0,0 +1,29 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'custom_error_widget.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $CustomErrorWidgetCWProxyImpl implements $ErrorWidgetComponentCWProxy { + const $CustomErrorWidgetCWProxyImpl(this._value); + final CustomErrorWidget _value; + @override + CustomErrorWidget error(String? error) => this(error: error); + @override + CustomErrorWidget key(Key? key) => this(key: key); + @override + CustomErrorWidget call({ + String? error, + Key? key, + }) => + CustomErrorWidget( + error: error ?? _value.error, + ); +} + +mixin $CustomErrorWidgetCWMixin on Component { + $ErrorWidgetComponentCWProxy get copyWith => + $CustomErrorWidgetCWProxyImpl(this as CustomErrorWidget); +} diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart new file mode 100644 index 00000000..9a8cc10e --- /dev/null +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; +import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; +import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart'; + +part 'custom_loading_widget.g.dart'; + +@ComponentCopyWithExtension() +class CustomLoadingWidget extends LoadingWidgetComponent + with $CustomLoadingWidgetCWMixin { + CustomLoadingWidget({super.color}); + + @override + Widget build(BuildContext context) => + Center(child: CircularProgressIndicator(color: color)); +} diff --git a/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.g.dart b/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.g.dart new file mode 100644 index 00000000..55a2ecb3 --- /dev/null +++ b/packages/wyatt_bloc_layout/example/lib/components/custom_loading_widget.g.dart @@ -0,0 +1,30 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'custom_loading_widget.dart'; + +// ************************************************************************** +// ComponentCopyWithGenerator +// ************************************************************************** + +class $CustomLoadingWidgetCWProxyImpl + implements $LoadingWidgetComponentCWProxy { + const $CustomLoadingWidgetCWProxyImpl(this._value); + final CustomLoadingWidget _value; + @override + CustomLoadingWidget color(Color? color) => this(color: color); + @override + CustomLoadingWidget key(Key? key) => this(key: key); + @override + CustomLoadingWidget call({ + Color? color, + Key? key, + }) => + CustomLoadingWidget( + color: color ?? _value.color, + ); +} + +mixin $CustomLoadingWidgetCWMixin on Component { + $LoadingWidgetComponentCWProxy get copyWith => + $CustomLoadingWidgetCWProxyImpl(this as CustomLoadingWidget); +} diff --git a/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart index 2357586c..6441c0c8 100644 --- a/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart +++ b/packages/wyatt_bloc_layout/example/lib/components/theme_components.dart @@ -1,4 +1,7 @@ -import 'package:flutter/material.dart'; +import 'package:bloc_layout_example/components/custom_app_bar.dart'; +import 'package:bloc_layout_example/components/custom_bottom_bar.dart'; +import 'package:bloc_layout_example/components/custom_error_widget.dart'; +import 'package:bloc_layout_example/components/custom_loading_widget.dart'; import 'package:wyatt_bloc_layout/wyatt_bloc_layout.dart'; class AppThemeComponent { @@ -9,71 +12,3 @@ class AppThemeComponent { errorWidget: CustomErrorWidget(), ); } - -class CustomAppBar extends AppBarComponent { - const CustomAppBar({super.title}); - @override - Widget build(BuildContext context) => AppBar( - title: Text(title ?? 'Title'), - ); - - @override - AppBarComponent? configure( - {String? title, Widget? leading, List? actions}) => - CustomAppBar( - title: title ?? this.title, - ); -} - -class CustomBottomBar extends BottomNavigationBarComponent { - @override - Widget build(BuildContext context) => BottomNavigationBar( - items: [ - BottomNavigationBarItem( - icon: Icon( - Icons.e_mobiledata, - ), - label: 'Icon 1'), - BottomNavigationBarItem( - icon: Icon( - Icons.do_not_disturb_off, - ), - label: 'Icon 2'), - ], - backgroundColor: Colors.blue, - ); - - @override - BottomNavigationBarComponent? configure( - {void Function(BuildContext p1, int p2)? onTap, - int currentIndex = 0}) => - this; -} - -class CustomLoadingWidget extends LoadingWidgetComponent { - CustomLoadingWidget({super.color}); - - @override - Widget build(BuildContext context) => - Center(child: CircularProgressIndicator(color: color)); - - @override - LoadingWidgetComponent? configure({Color? color}) => CustomLoadingWidget( - color: color ?? this.color, - ); -} - -class CustomErrorWidget extends ErrorWidgetComponent { - CustomErrorWidget({super.error}); - - @override - Widget build(BuildContext context) => ColoredBox( - color: Colors.red, - child: Center(child: Text(error ?? 'Error')), - ); - - @override - ErrorWidgetComponent? configure({String? error}) => CustomErrorWidget( - error: error ?? this.error, - ); -} diff --git a/packages/wyatt_bloc_layout/example/pubspec.yaml b/packages/wyatt_bloc_layout/example/pubspec.yaml index 1389846d..31266038 100644 --- a/packages/wyatt_bloc_layout/example/pubspec.yaml +++ b/packages/wyatt_bloc_layout/example/pubspec.yaml @@ -3,7 +3,7 @@ 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 +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 @@ -27,19 +27,26 @@ environment: # the latest version available on pub.dev. To see which dependencies have newer # versions available, run `flutter pub outdated`. dependencies: - flutter: sdk: flutter - - + wyatt_bloc_layout: path: "../" + wyatt_component_copy_with_extension: + git: + url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git + path: packages/wyatt_component_copy_with_extension + dev_dependencies: - flutter_test: sdk: flutter - + + build_runner: ^2.3.3 + wyatt_component_copy_with_gen: + git: + url: ssh://git@git.wyatt-studio.fr:993/Wyatt-FOSS/wyatt-packages.git + path: packages/wyatt_component_copy_with_gen wyatt_analysis: git: @@ -50,10 +57,8 @@ dev_dependencies: # 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. 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. diff --git a/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart b/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart index 1f62595a..f3b1133c 100644 --- a/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart +++ b/packages/wyatt_bloc_layout/lib/src/core/crud_cubit_consumer_screen_mixin.dart @@ -23,7 +23,7 @@ import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart'; mixin CrudMixin { Widget errorBuilder(BuildContext context, CrudError state) => - context.components.errorWidget?.configure(error: state.message) ?? + context.components.errorWidget?.copyWith(error: state.message) ?? const SizedBox.shrink(); Widget loadingBuilder(BuildContext context, CrudLoading state) =>