dartplus

Creator: coderz1093

Last updated:

0 purchases

dartplus Image
dartplus Images

Languages

Categories

Add to Cart

Description:

dartplus

dartplus
dartplus is a library that tries to provide some advance features that are missing in current dart lang. Here they are -


Either





Either Left or Right
Simple & Lightweight Error Handling Solution

Greatly influenced by type Either in functional programming languages

Features #

Cross platform: mobile, desktop, browser
No dependencies ( Not even flutter )
JUST 15 lines of code

Why Either #
Developers are awesome, they write good apps for people to make their life happier and easier. Sounds good! But even the best apps in market need to handle error. Therefore developers always seek for simple error handling solutions.

Either helps you to catch an error as soon as possible and return it along with the data( User, message, data etc.)

Usages #
Here is how Either Works
Consider an async function Future login(String email, String password) that will try to login. If user successfully gets logged in, the function will obviously return User.
So your function will be some kind of -
Future<dynamic> login(String email, String password) async {
try {
final result = await FirebaseAuth.instance
.signInWithEmailAndPassword(email: email, password: password);

return result.user;
} catch (error) {
return error;
}
}
copied to clipboard
but there is problem with this type of approach, This is neither compile-safe nor predictive. In a big project, you will definately get into trouble finding the return type of the function.
Here Either comes to rescue you. The same function can be written using Either -
Future<Either<AppError, User>> login(String email, String password) async {
try {
final result = await FirebaseAuth.instance
.signInWithEmailAndPassword(email: email, password: password);

// Add a null check (!) after user because Either will always single value either left() or right() and the second will be null
// Here if we don't get any error, the result will definately provide user and user will not be null
// by adding null check operator (!) we are telling the compiler that result.user is not null
return right(result.user!);
} catch (error) {
// Here we don't need a null check because compiler is happy with new AppError Obj
return left(AppError(error: "Some error occured while loggin in!"));
}
}

copied to clipboard

Always return data using right() and error using left() just for convention

Now you can extract values using result.left and result.right
Example #
import 'package:either/either.dart';

main() async {
final result = await login("vickyboss");

if (result.isLeft)
print("Failure : ${result.left?.error}");
else
print("Success : Logged in as ${result.right?.name}");
}

Future<Either<AppError, User>> login(String username) async {
await Future.delayed(Duration(seconds: 2));
if (username.length < 6) return left(AppError(error: "Invalid Username!"));
return right(User(name: username));

// You can implement a try/catch bloc with real login
// If login success return right(User)
// If login fails return left(AppError)
}

class User {
String name;

User({
required this.name,
});
}

class AppError {
String error;

AppError({
required this.error,
});
}

copied to clipboard

If dartplus makes a smile on your face, I'll be happy

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.