Skip to main content

Flutter Vaden

Flutter Vaden is a powerful package that integrates the Vaden framework's dependency injection and API client capabilities into Flutter applications. It simplifies RESTful API development and provides robust tools for managing dependencies and data transfer objects (DTOs).

Installation

To install Flutter Vaden, add the following dependencies to your pubspec.yaml file:

dependencies:
flutter_vaden: ^latest_version

dev_dependencies:
vaden_class_scanner: ^latest_version
build_runner: ^latest_version

Run the following commands:

flutter pub get

Before running the build_runner command, ensure you have a build.yaml file in your project with the following content:

targets:
$default:
builders:
vaden_class_scanner|aggregating_vaden_builder:
enabled: true
options:
target: flutter

Now:

dart run build_runner build

The build command generates a class named VadenApp. Use this class in your runApp method:

void main() {
runApp(VadenApp());
}

Features

Dependency Injection

Flutter Vaden provides a complete dependency injection system:

  • @Configuration(): Defines configuration classes.
  • @Service(): Marks classes as services. Prefer registering services via their interfaces.
  • @Repository(): Marks classes as repositories. Prefer registering repositories via their interfaces.

Accessing Instances in Widgets

You can access registered instances directly in your Flutter widgets using:

context.read<NameOfComponent>()

Data Transfer Objects (DTOs)

The package supports @DTO() annotations for defining data transfer objects. These DTOs are used for serializing and deserializing data in API requests and responses.

API Client

The highlight of Flutter Vaden is the @ApiClient() annotation, which allows you to create abstractions for RESTful APIs similar to Retrofit. Internally, it uses Dio for making HTTP requests. You can customize Dio, such as setting a baseUrl or adding interceptors, by creating a @Configuration() for Dio.

Example

()
class DioConfiguration {
()
Dio dio() {
final dio = Dio(BaseOptions(baseUrl: 'https://api.example.com'));
dio.interceptors.add(LogInterceptor(responseBody: true));
return dio;
}
}

()
abstract class ProductApi {
('/product/<id>')
Future<ProductDTO> getProduct(() int id);

('/product')
Future<ProductDTO> createProduct(() ProductDTO product);

('/product/<id>')
Future<ProductDTO> updateProduct(() int id, () ProductDTO product);

('/product/<id>')
Future<void> deleteProduct(() int id);

('/products')
Future<List<ProductDTO>> getAllProducts();
}

Notes

  • All return objects and @Body() parameters must be annotated with @DTO().
  • The @ApiClient() annotation simplifies API integration by generating the necessary code for making HTTP requests.

Flutter Vaden is designed to streamline your Flutter development process, making it easier to manage dependencies and interact with RESTful APIs. Enjoy building robust and scalable applications with Flutter Vaden!