Skip to content

Commit 2d8f5a6

Browse files
committed
update example
added Future.maybeUnwrap method added TioResponse.maybeResult and maybeError getters 2.3.0
1 parent c1a64fe commit 2d8f5a6

File tree

6 files changed

+54
-37
lines changed

6 files changed

+54
-37
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 2.3.0
2+
- Update example
3+
- Added Future.maybeUnwrap method
4+
- Added TioResponse.maybeResult and maybeError getters
5+
16
## 2.2.0
27
- Added TioResponse.requireError getter
38
- Added FutureX.unwrap method

README.md

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,38 +18,29 @@ Inspired by [chopper](https://pub.dev/packages/chopper).
1818
#### Basic usage:
1919

2020
```dart
21-
// ignore_for_file: avoid_print
2221
import 'package:dio/dio.dart';
2322
import 'package:tio/tio.dart';
2423
2524
class User {
26-
User.fromJson(Map<String, dynamic> json) : id = json['id'] as int;
25+
User.fromJson(JsonMap json) : id = json['id'] as int;
2726
2827
final int id;
2928
}
3029
3130
class MyError {
3231
const MyError.fromString(this.errorMessage);
3332
34-
const MyError.empty() : errorMessage = 'Unknown message';
35-
36-
MyError.fromJson(Map<String, dynamic> json)
37-
: errorMessage = json['message'] as String;
33+
MyError.fromJson(JsonMap json) : errorMessage = json['message'] as String;
3834
3935
final String errorMessage;
4036
}
4137
4238
const factoryConfig = TioFactoryConfig<MyError>(
43-
[
44-
TioJsonFactory<User>(User.fromJson),
45-
],
46-
// Factory for error transformation
47-
errorGroup: TioFactoryGroup(
48-
// when response body is empty (or empty string)
49-
empty: TioEmptyFactory(MyError.empty),
50-
string: TioStringFactory(MyError.fromString), // string
51-
json: TioJsonFactory(MyError.fromJson), // or json
52-
),
39+
jsonFactories: {
40+
User.fromJson,
41+
},
42+
errorJsonFactory: MyError.fromJson,
43+
errorStringFactory: MyError.fromString,
5344
);
5445
5546
final dio = Dio();
@@ -77,7 +68,20 @@ void main() async {
7768
case TioFailure<User, MyError>(error: final error):
7869
print('error acquired ${error.errorMessage}');
7970
}
71+
72+
// ignore: omit_local_variable_types
73+
final User? user = await getUser(2).map(
74+
success: (success) => success.result,
75+
failure: (failure) => null,
76+
);
77+
78+
// ignore: omit_local_variable_types
79+
final User? user2 = await getUser(3).when(
80+
success: (user) => user,
81+
failure: (error) => null,
82+
);
8083
}
84+
8185
```
8286

8387
## Guide

example/main.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,17 @@ void main() async {
5050
}
5151

5252
// ignore: omit_local_variable_types
53-
final User? user = await getUser(2).map(
53+
final User? user = await getUser(1).map(
5454
success: (success) => success.result,
5555
failure: (failure) => null,
5656
);
5757

5858
// ignore: omit_local_variable_types
59-
final User? user2 = await getUser(3).when(
60-
success: (user) => user,
59+
final User? user2 = await getUser(2).when(
60+
success: (result) => result,
6161
failure: (error) => null,
6262
);
63+
64+
// ignore: omit_local_variable_types
65+
final User? user3 = (await getUser(3)).maybeResult;
6366
}

lib/src/responses/response.dart

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import 'package:equatable/equatable.dart';
22

3-
import '../errors.dart';
43
import '../typedefs.dart';
54

65
mixin TioResponseMixin<R, E> {
@@ -23,6 +22,20 @@ mixin TioResponseMixin<R, E> {
2322
final TioFailure<R, E> value => failure(value.error),
2423
_ => throw StateError('Bad state'),
2524
};
25+
26+
R? get maybeResult => when(success: (result) => result, failure: (_) => null);
27+
28+
E? get maybeError => when(success: (_) => null, failure: (error) => error);
29+
30+
R get requireResult => when(
31+
success: (result) => result,
32+
failure: (_) => throw StateError('Response is not succeed'),
33+
);
34+
35+
E get requireError => when(
36+
success: (_) => throw StateError('Response is not failures'),
37+
failure: (error) => error,
38+
);
2639
}
2740

2841
abstract class TioResponse<R, E> with EquatableMixin, TioResponseMixin<R, E> {
@@ -34,16 +47,6 @@ abstract class TioResponse<R, E> with EquatableMixin, TioResponseMixin<R, E> {
3447

3548
TioResponse<T, E> withSuccess<T>(TioResultTransformer<R, E, T> builder);
3649

37-
R get requireResult => map(
38-
success: (success) => success.result,
39-
failure: (_) => throw StateError('Response is not succeed'),
40-
);
41-
42-
E get requireError => map(
43-
success: (_) => throw StateError('Response is not failures'),
44-
failure: (failure) => failure.error,
45-
);
46-
4750
bool get isSuccess => this is TioSuccess;
4851

4952
bool get isFailure => this is TioFailure;

lib/src/x.dart

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,19 @@ extension DioX on Dio {
5050
}
5151

5252
extension FutureTioResponseX<R, E> on Future<TioResponse<R, E>> {
53-
Future<T> map<T>({
54-
required T Function(TioSuccess<R, E> success) success,
55-
required T Function(TioFailure<R, E> failure) failure,
53+
Future<K> map<K>({
54+
required K Function(TioSuccess<R, E> success) success,
55+
required K Function(TioFailure<R, E> failure) failure,
5656
}) =>
5757
then((response) => response.map(success: success, failure: failure));
5858

59-
Future<T> when<T>({
60-
required T Function(R result) success,
61-
required T Function(E error) failure,
59+
Future<K> when<K>({
60+
required K Function(R result) success,
61+
required K Function(E error) failure,
6262
}) =>
6363
then((response) => response.when(success: success, failure: failure));
6464

6565
Future<R> unwrap() => then((response) => response.requireResult);
66+
67+
Future<R?> maybeUnwrap() => then((response) => response.maybeResult);
6668
}

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: tio
2-
version: 2.2.0
2+
version: 2.3.0
33
repository: https://github.com/urusai88/tio
44

55
description: |

0 commit comments

Comments
 (0)