chassis 0.0.1+4 
chassis: ^0.0.1+4 copied to clipboard
An architectural framework for flutter applications
import 'package:chassis/chassis.dart';
// domain/repository
abstract interface class IGreetingRepository {
  Future<String> getGreeting();
}
abstract interface class IAnalyticsService {
  Future<void> trackEvent(String event, [Map<String, dynamic>? data]);
}
// app/repository
class GreetingRepository implements IGreetingRepository {
  @override
  Future<String> getGreeting() async => "Hello Chassis";
}
// domain/uses_cases
class GetGreetingQuery implements ReadQuery<String> {
  const GetGreetingQuery();
}
// Simple handler using extends
class GetGreetingQueryHandler extends ReadHandler<GetGreetingQuery, String> {
  GetGreetingQueryHandler(IGreetingRepository repository)
      : super((query) => repository.getGreeting());
}
// More complex handler using implements (for scenarios with multiple dependencies)
class GetGreetingQueryHandlerComplex
    implements ReadHandler<GetGreetingQuery, String> {
  final IGreetingRepository _repository;
  final IAnalyticsService _analytics;
  GetGreetingQueryHandlerComplex(this._repository, this._analytics);
  @override
  Future<String> read(GetGreetingQuery query) async {
    // More complex business logic with multiple dependencies
    await _analytics.trackEvent('greeting_requested');
    final greeting = await _repository.getGreeting();
    await _analytics.trackEvent('greeting_retrieved');
    return greeting;
  }
}
// app/main.dart
final mediator = Mediator();
Future<void> main() async {
  final greetingRepository = GreetingRepository();
  // Register the simple handler
  mediator.registerQueryHandler(GetGreetingQueryHandler(greetingRepository));
  final greeting = await mediator.read(const GetGreetingQuery());
  print(greeting);
}