answer 0.0.1 copy "answer: ^0.0.1" to clipboard
answer: ^0.0.1 copied to clipboard

A package to help you handle returns

Answer #

The Answer package simplifies the handling of function returns by allowing them to return either a success or an error object. This enhances code readability and makes error handling more structured.

How to use #

To use the package in your Flutter project, simply add the dependency to your pubspec.yaml:

dependencies:
  answer: ^0.0.1

Import the package in your code:

import 'package:answer/answer.dart';

How add Answer return in your code #

   Future<Answer<AnswerFailure, String>> getUserId() async {
    try {
        final result = await loginDatasource.getUserId();
        return Answer.success(result);
    } catch (e) {
        return Answer.fail(e);
    }
  }

With extension Answer #

    Future<Answer<AnswerFailure, String>> getUserId() async {
        try {
            final result = await loginDatasource.getUserId();
            return result.asAnswer();
        } catch (e) {
            return e.asAnswer();
        }
    }

How handler Answer return in your code #

Void function #

  Future<void> login() async {
    final answer = await getUserId();
    answer.deal(
      onSuccess: (idUser) {
        print(idUser);
      },
      onError: (error) {
        print(error);
      },
    );
  }

Function with return #

  Future<String> login() async {
    final answer = await getUserId();
    return answer.deal(
      onSuccess: (idUser) {
        return idUser;
      },
      onError: (error) {
        return error.message;
      },
    );
  }

Recommended you use AnswerFailure #

We recommend that you use the class [Answer Failure] as the default response for [Failure], this guarantees that your returns will always have a pattern, if you need a specific error, create a new error extending the class [Answer Failure]

Create your Specific from AnswerFailure #

class MyError extends AnswerFailure {
  MyError() : super(
          message: 'MyError',
          code: 1,
        );
}

How add Answer return in your code #

   Future<Answer<AnswerFailure, String>> getUserId() async {
    try {
        final result = await loginDatasource.getUserId();
        return Answer.success(result);
    } catch (e) {
        return Answer.fail(MyError());
    }
  }

Handler your custom AnswerFailure #

  Future<void> login() async {
    final answer = await getUserId();
    answer.deal(
      onSuccess: (idUser) {
        print(idUser);
      },
      onError: (error) {
        if (error is MyError) {
          print(error.message);
        }else{
          print(error.message);
        }
      },
    );
  }

You also can use AnswerDefault to simplify your code #

You can also use TypeDef [AnswerDefault] simplifying the parameters, it by default returns [AnswerFailure] and you just need to pass the success object

   Future<AnswerDefault<String>> getUserId() async {
    try {
        final result = await loginDatasource.getUserId();
        return Answer.success(result);
    } catch (e) {
        return Answer.fail(e);
    }
  }
5
likes
140
points
24
downloads

Publisher

unverified uploader

Weekly Downloads

A package to help you handle returns

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on answer