add documentation

pull/2342/head
Miguel Beltran 4 months ago
parent 9885024b18
commit a583b31c77

@ -1,11 +1,10 @@
import 'package:compass_app/features/results/business/usecases/search_destination_usecase.dart';
import 'package:compass_app/features/results/data/destination_repository.dart';
import 'package:compass_app/features/results/data/destination_repository_local.dart';
import 'package:compass_app/features/results/presentation/results_viewmodel.dart';
import 'package:provider/provider.dart';
import 'package:provider/single_child_widget.dart';
// Configure dependencies
/// Configure dependencies as a list of Providers
List<SingleChildWidget> get providers {
// These dependencies don't need to be in the widget tree (yet?)
final destinationRepository = DestinationRepositoryLocal();

@ -1,21 +1,36 @@
/// Utility class to wrap result data
sealed class Result<T> {
const Result();
/// Creates an instance of Result containing a value
factory Result.ok(T value) => Ok(value);
/// Create an instance of Result containing an error
factory Result.error(Exception error) => Error(error);
/// Convenience method to cast to Ok
Ok<T> get asOk => this as Ok<T>;
/// Convenience method to cast to Error
Error get asError => this as Error<T>;
}
/// Subclass of Result for values
final class Ok<T> extends Result<T> {
const Ok(this.value);
/// Returned value in result
final T value;
@override
String toString() => 'Result<$T>.ok($value)';
}
/// Subclass of Result for errors
final class Error<T> extends Result<T> {
const Error(this.error);
/// Returned error in result
final Exception error;
@override

@ -1,3 +1,4 @@
/// Model class for Destination data
class Destination {
Destination({
required this.ref,

@ -2,6 +2,7 @@ import 'package:compass_app/common/utils/result.dart';
import 'package:compass_app/features/results/business/model/destination.dart';
import 'package:compass_app/features/results/data/destination_repository.dart';
/// Search Destinations Usecase
class SearchDestinationUsecase {
SearchDestinationUsecase({
required DestinationRepository repository,
@ -10,6 +11,7 @@ class SearchDestinationUsecase {
final DestinationRepository _repository;
/// Perform search over possible destinations
/// All search filter options are optional
Future<Result<List<Destination>>> search({String? continent}) async {
bool filter(Destination destination) {
return (continent == null || destination.continent == continent);

@ -1,6 +1,5 @@
import 'package:compass_app/common/utils/result.dart';
import 'package:compass_app/features/results/business/model/destination.dart';
import 'package:flutter/material.dart';
/// Data source with all possible destinations
abstract class DestinationRepository {

@ -9,6 +9,8 @@ import 'package:flutter/services.dart' show rootBundle;
/// Local implementation of DestinationRepository
/// Uses data from assets folder
class DestinationRepositoryLocal implements DestinationRepository {
/// Obtain list of destinations from local assets
@override
Future<Result<List<Destination>>> getDestinations() async {
try {

@ -3,6 +3,7 @@ import 'package:compass_app/features/results/business/model/destination.dart';
import 'package:compass_app/features/results/business/usecases/search_destination_usecase.dart';
import 'package:flutter/cupertino.dart';
/// Results screen view model
/// Based on https://docs.flutter.dev/get-started/fwe/state-management#using-mvvm-for-your-applications-architecture
class ResultsViewModel extends ChangeNotifier {
ResultsViewModel({

@ -1,6 +1,7 @@
import 'package:compass_app/features/results/presentation/results_screen.dart';
import 'package:go_router/go_router.dart';
/// Top go_router entry point
final router = GoRouter(
initialLocation: '/results',
routes: [

Loading…
Cancel
Save