Skip to content

Commit 2b32051

Browse files
committed
fix fix
1 parent 910ca0d commit 2b32051

File tree

6 files changed

+88
-69
lines changed

6 files changed

+88
-69
lines changed

analysis_options.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
include: package:pedantic/analysis_options.1.11.0.yaml
2+
3+
analyzer:
4+
enable-experiment:
5+
- nonfunction-type-aliases
6+
27
linter:
38
rules:
49
- prefer_final_locals

lib/data/user_repository_imp.dart

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import 'package:node_auth/domain/models/user_and_token.dart';
1313
import 'package:node_auth/domain/repositories/user_repository.dart';
1414
import 'package:node_auth/utils/result.dart';
1515
import 'package:rxdart/rxdart.dart';
16+
import 'package:rxdart_ext/rxdart_ext.dart';
17+
import 'package:tuple/tuple.dart';
1618

1719
part 'mappers.dart';
1820

@@ -42,34 +44,28 @@ class UserRepositoryImpl implements UserRepository {
4244
}
4345

4446
@override
45-
Stream<Result<void>> login({
47+
Single_Result_Unit login({
4648
required String email,
4749
required String password,
4850
}) {
49-
return _execute(
50-
() => _remoteDataSource.loginUser(
51-
email,
52-
password,
53-
),
54-
).flatMapResult((result) {
51+
return _execute(() => _remoteDataSource.loginUser(email, password))
52+
.flatMapResult((result) {
5553
final token = result!.token!;
56-
57-
return _execute(
58-
() => _remoteDataSource.getUserProfile(
59-
email,
60-
token,
61-
),
62-
).flatMapResult(
63-
(user) => _execute(
64-
() => _localDataSource.saveUserAndToken(
65-
_Mappers.userResponseToUserAndTokenEntity(
66-
user!,
67-
token,
68-
),
69-
),
70-
),
71-
);
72-
});
54+
return _execute(() => _remoteDataSource
55+
.getUserProfile(email, token)
56+
.then((user) => Tuple2(user, token)));
57+
}).flatMapResult(
58+
(tuple) => _execute(
59+
() => _localDataSource
60+
.saveUserAndToken(
61+
_Mappers.userResponseToUserAndTokenEntity(
62+
tuple!.item1,
63+
tuple.item2,
64+
),
65+
)
66+
.then((value) => unit),
67+
),
68+
);
7369
}
7470

7571
@override
@@ -173,9 +169,11 @@ class UserRepositoryImpl implements UserRepository {
173169
/// if future is successful, emit [Success]
174170
/// if future complete with error, emit [Failure]
175171
///
176-
Stream<Result<T>> _execute<T>(Future<T> Function() factory) =>
177-
Rx.fromCallable(factory)
178-
.doOnError(_handleUnauthenticatedError)
172+
Single<Result<T>> _execute<T>(Future<T> Function() factory) =>
173+
Single.fromCallable(factory)
174+
.doOnError(
175+
_handleUnauthenticatedError) // TODO(single): remove singleOrError
176+
.singleOrError()
179177
.map<Result<T>>((value) => Success<T>.of(value: value))
180178
.onErrorReturnWith(_errorToResult);
181179

lib/domain/repositories/user_repository.dart

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,40 @@ import 'dart:io';
22

33
import 'package:node_auth/domain/models/auth_state.dart';
44
import 'package:node_auth/utils/result.dart';
5+
import 'package:rxdart_ext/rxdart_ext.dart';
6+
7+
typedef Single_Result_Unit = Single<Result<Unit>>;
58

69
abstract class UserRepository {
710
Stream<AuthenticationState> get authenticationState$;
811

912
Future<AuthenticationState> get authenticationState;
1013

11-
Stream<Result<void>> login({
14+
Single_Result_Unit login({
1215
required String email,
1316
required String password,
1417
});
1518

16-
Stream<Result<void>> registerUser({
19+
Single_Result_Unit registerUser({
1720
required String name,
1821
required String email,
1922
required String password,
2023
});
2124

22-
Stream<Result<void>> logout();
25+
Single_Result_Unit logout();
2326

24-
Stream<Result<void>> uploadImage(File image);
27+
Single_Result_Unit uploadImage(File image);
2528

26-
Stream<Result<void>> changePassword({
29+
Single_Result_Unit changePassword({
2730
required String password,
2831
required String newPassword,
2932
});
3033

31-
Stream<Result<void>> resetPassword({
34+
Single_Result_Unit resetPassword({
3235
required String email,
3336
required String token,
3437
required String newPassword,
3538
});
3639

37-
Stream<Result<void>> sendResetPasswordEmail(String email);
40+
Single_Result_Unit sendResetPasswordEmail(String email);
3841
}

lib/utils/result.dart

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:built_value/built_value.dart';
22
import 'package:meta/meta.dart';
3-
import 'package:rxdart/rxdart.dart';
3+
import 'package:rxdart_ext/rxdart_ext.dart';
44

55
part 'result.g.dart';
66

@@ -51,21 +51,26 @@ abstract class Failure<T>
5151
factory Failure([void Function(FailureBuilder<T>) updates]) = _$Failure<T>;
5252
}
5353

54-
extension FlatMapResultExtension<T> on Stream<Result<T>> {
55-
Stream<Result<R>> flatMapResult<R>(
56-
Stream<Result<R>> Function(T? value) mapper) {
57-
return flatMap((result) {
58-
if (result is Failure<T>) {
59-
final failure = Failure<R>.of(
60-
message: result.message,
61-
error: result.error,
62-
);
63-
return Stream.value(failure);
64-
}
65-
if (result is Success<T>) {
66-
return mapper(result.value);
67-
}
68-
return Stream.error('Cannot handle result: $result');
69-
});
54+
extension FlatMapResultExtension<T extends Object?> on Single<Result<T>> {
55+
Single<Result<R>> flatMapResult<R>(
56+
Single<Result<R>> Function(T? value) mapper,
57+
) {
58+
return flatMapSingle(
59+
(result) => result.fold(
60+
mapper,
61+
(error, message) => Single.value(
62+
Failure<R>.of(
63+
message: message,
64+
error: error,
65+
),
66+
),
67+
),
68+
);
7069
}
7170
}
71+
72+
class Unit {
73+
const Unit._();
74+
}
75+
76+
const unit = Unit._();

pubspec.lock

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ packages:
2828
name: async
2929
url: "https://pub.dartlang.org"
3030
source: hosted
31-
version: "2.5.0"
31+
version: "2.6.1"
3232
boolean_selector:
3333
dependency: transitive
3434
description:
@@ -236,7 +236,7 @@ packages:
236236
name: flutter_bloc_pattern
237237
url: "https://pub.dartlang.org"
238238
source: hosted
239-
version: "2.1.0"
239+
version: "2.1.1"
240240
flutter_blurhash:
241241
dependency: transitive
242242
description:
@@ -316,7 +316,7 @@ packages:
316316
name: image_picker
317317
url: "https://pub.dartlang.org"
318318
source: hosted
319-
version: "0.7.5"
319+
version: "0.7.5+3"
320320
image_picker_for_web:
321321
dependency: transitive
322322
description:
@@ -498,21 +498,23 @@ packages:
498498
name: rxdart
499499
url: "https://pub.dartlang.org"
500500
source: hosted
501-
version: "0.27.0"
501+
version: "0.27.1"
502502
rxdart_ext:
503503
dependency: "direct main"
504504
description:
505-
name: rxdart_ext
506-
url: "https://pub.dartlang.org"
507-
source: hosted
508-
version: "0.1.0"
505+
path: "."
506+
ref: b2c19235776bb50af60bc1f029766ee68f4f61c6
507+
resolved-ref: b2c19235776bb50af60bc1f029766ee68f4f61c6
508+
url: "https://github.com/hoc081098/rxdart_ext.git"
509+
source: git
510+
version: "0.1.1-dev.0"
509511
shared_preferences:
510512
dependency: "direct main"
511513
description:
512514
name: shared_preferences
513515
url: "https://pub.dartlang.org"
514516
source: hosted
515-
version: "2.0.5"
517+
version: "2.0.6"
516518
shared_preferences_linux:
517519
dependency: transitive
518520
description:
@@ -580,7 +582,7 @@ packages:
580582
name: source_span
581583
url: "https://pub.dartlang.org"
582584
source: hosted
583-
version: "1.8.0"
585+
version: "1.8.1"
584586
stack_trace:
585587
dependency: transitive
586588
description:
@@ -622,7 +624,7 @@ packages:
622624
name: test_api
623625
url: "https://pub.dartlang.org"
624626
source: hosted
625-
version: "0.2.19"
627+
version: "0.3.0"
626628
timing:
627629
dependency: transitive
628630
description:
@@ -687,5 +689,5 @@ packages:
687689
source: hosted
688690
version: "3.1.0"
689691
sdks:
690-
dart: ">=2.12.0 <3.0.0"
692+
dart: ">=2.13.0 <3.0.0"
691693
flutter: ">=2.0.0"

pubspec.yaml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ publish_to: 'none'
55
version: 2.0.0+2
66

77
environment:
8-
sdk: ">=2.12.0 <3.0.0"
8+
sdk: ">=2.13.0 <3.0.0"
99

1010
dependencies:
1111
flutter:
@@ -17,18 +17,18 @@ dependencies:
1717
http: ^0.13.3
1818
built_value: ^8.0.6
1919
tuple: ^2.0.0
20-
rxdart: ^0.27.0
21-
image_picker: ^0.7.5
22-
shared_preferences: ^2.0.5
20+
rxdart: ^0.27.1
21+
image_picker: ^0.7.5+3
22+
shared_preferences: ^2.0.6
2323
octo_image: ^1.0.0+1
2424

2525
distinct_value_connectable_stream: ^1.3.0
2626
flutter_provider: ^2.0.0
2727
rx_shared_preferences: ^2.1.0
2828
disposebag: ^1.5.0
2929
flutter_disposebag: ^1.1.0
30-
flutter_bloc_pattern: ^2.1.0
31-
rxdart_ext: ^0.1.0
30+
flutter_bloc_pattern: ^2.1.1
31+
rxdart_ext: ^0.1.1-dev.0
3232
did_change_dependencies: ^0.0.3
3333
pedantic: ^1.11.0
3434

@@ -39,6 +39,12 @@ dev_dependencies:
3939
build_runner: ^1.12.2
4040
built_value_generator: ^8.0.6
4141

42+
dependency_overrides:
43+
rxdart_ext:
44+
git:
45+
url: https://github.com/hoc081098/rxdart_ext.git
46+
ref: b2c19235776bb50af60bc1f029766ee68f4f61c6
47+
4248
flutter:
4349
uses-material-design: true
4450
assets:

0 commit comments

Comments
 (0)