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!