<!--
 * Copyright (C) 2023 WYATT GROUP
 * Please see the AUTHORS file for details.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
-->

# Flutter - Component Copy With Extension

<p align="left">
  <a href="https://git.wyatt-studio.fr/Wyatt-FOSS/wyatt-packages/src/branch/master/packages/wyatt_analysis"><img src="https://img.shields.io/badge/Style-Wyatt%20Analysis-blue.svg?style=flat-square" alt="Style: Wyatt Analysis" /></a>
  <img src="https://img.shields.io/badge/SDK-Flutter-blue?style=flat-square" alt="SDK: Flutter" />
</p>

This package provides annotations for generating code and simplifying the use of an UI kit within a Flutter application. **The package contains only the annotation classes**.

## Annotation Classes

#### `ComponentProxyExtension`

This annotation class is used to annotate a new component of an UI kit in the `wyatt_ui_components` package. It generates the abstract proxy of the component and allows access to all its properties in different packages and throughout the application.

```dart
part 'text_field_component.g.dart';

@ComponentProxyExtension()
abstract class TextFieldComponent extends Component {
 with CopyWithMixin<$TextFieldComponentCWProxy> {

    const TextFieldComponent({
      ...
  });
}
```

#### `ComponentCopyWithExtension`

This annotation class is used to annotate the implementation of components directly in the application. It generates the implementation of the proxy and the mixin to ensure that the component meets the specifications defined in the `wyatt_ui_components package`.

```dart
part 'text_field_component.g.dart';

@ComponentProxyExtension()
abstract class TextFieldComponent extends Component {
 with CopyWithMixin<$TextFieldComponentCWProxy> {

    const TextFieldComponent({
      ...
  });
}
```

## Additional features

The skipFields field allows you to directly and specifically change a field. This makes it easier to use. You can disable it through annotation.
