Skip to content

Commit 40e2dab

Browse files
committed
add rxdart over mobx
1 parent 3557f9a commit 40e2dab

19 files changed

+135
-501
lines changed

.flutter-plugins-dependencies

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"connectivity","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/connectivity-0.4.6+2/","dependencies":[]},{"name":"fluttertoast","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/fluttertoast-3.1.3/","dependencies":[]},{"name":"image_picker","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/image_picker-0.6.3+1/","dependencies":[]},{"name":"shared_preferences","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.6/","dependencies":[]},{"name":"sqflite","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/sqflite-1.2.0/","dependencies":[]}],"android":[{"name":"connectivity","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/connectivity-0.4.6+2/","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_android_lifecycle-1.0.4/","dependencies":[]},{"name":"fluttertoast","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/fluttertoast-3.1.3/","dependencies":[]},{"name":"image_picker","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/image_picker-0.6.3+1/","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"shared_preferences","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.6/","dependencies":[]},{"name":"sqflite","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/sqflite-1.2.0/","dependencies":[]}],"macos":[{"name":"shared_preferences_macos","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/shared_preferences_macos-0.0.1+3/","dependencies":[]},{"name":"sqflite","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/sqflite-1.2.0/","dependencies":[]}],"linux":[],"windows":[],"web":[{"name":"shared_preferences_web","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/shared_preferences_web-0.1.2+2/","dependencies":[]}]},"dependencyGraph":[{"name":"connectivity","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"fluttertoast","dependencies":[]},{"name":"image_picker","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"sqflite","dependencies":[]}],"date_created":"2020-06-27 14:38:26.401130","version":"1.17.4"}
1+
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"connectivity","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/connectivity-0.4.6+2/","dependencies":[]},{"name":"fluttertoast","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/fluttertoast-3.1.3/","dependencies":[]},{"name":"image_picker","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/image_picker-0.6.3+1/","dependencies":[]},{"name":"shared_preferences","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.6/","dependencies":[]},{"name":"sqflite","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/sqflite-1.2.0/","dependencies":[]}],"android":[{"name":"connectivity","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/connectivity-0.4.6+2/","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_android_lifecycle-1.0.4/","dependencies":[]},{"name":"fluttertoast","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/fluttertoast-3.1.3/","dependencies":[]},{"name":"image_picker","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/image_picker-0.6.3+1/","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"shared_preferences","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.6/","dependencies":[]},{"name":"sqflite","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/sqflite-1.2.0/","dependencies":[]}],"macos":[{"name":"shared_preferences_macos","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/shared_preferences_macos-0.0.1+3/","dependencies":[]},{"name":"sqflite","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/sqflite-1.2.0/","dependencies":[]}],"linux":[],"windows":[],"web":[{"name":"shared_preferences_web","path":"/Users/tguizelini/.pub-cache/hosted/pub.dartlang.org/shared_preferences_web-0.1.2+2/","dependencies":[]}]},"dependencyGraph":[{"name":"connectivity","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"fluttertoast","dependencies":[]},{"name":"image_picker","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"sqflite","dependencies":[]}],"date_created":"2020-06-28 14:53:39.927388","version":"1.17.4"}

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ This project structure was made thinking in productivity and easy maintenance.
88

99
2. Get_It for dependency injection
1010

11-
3. MobX to manage states
11+
3. State management
12+
- BRANCH "master" -> RxDart
13+
- BRANCH "mobx" -> Mobx
1214

1315
4. SQFlite to work with SQLite
1416

lib/app/data/auth.repository.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
import 'package:flutter/material.dart';
12
import 'package:flutter_architecture/app/domain/http_response.dart';
23
import 'package:flutter_architecture/app/domain/repositories/auth.repository.dart';
3-
import 'package:flutter_architecture/core/di/service_locator.dart';
4+
import 'package:flutter_architecture/core/di/injector_provider.dart';
45
import 'package:flutter_architecture/device/connection/connection.helper.dart';
56

67
import 'sources/remote/auth.service.dart';
78

89
class AuthRepository implements IAuthRepository {
9-
AuthService service = serviceLocator<AuthService>();
10+
AuthService service = inject<AuthService>();
1011

1112
@override
1213
Future<HttpResponse> login(String login, String senha) async {

lib/app/data/sources/remote/auth.service.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import 'package:flutter_architecture/app/data/mappers/user.mapper.dart';
22
import 'package:flutter_architecture/app/data/sources/cache/storage.helper.dart';
33
import 'package:flutter_architecture/app/domain/http_response.dart';
44
import 'package:flutter_architecture/core/di/http_client.dart';
5-
import 'package:flutter_architecture/core/di/service_locator.dart';
5+
import 'package:flutter_architecture/core/di/injector_provider.dart';
66

77
import './base/endpoints.dart' as Endpoints;
88

99
class AuthService{
10-
final client = serviceLocator<HttpClient>();
10+
HttpClient client = inject<HttpClient>();
1111

1212
Future<HttpResponse> login(String login, String senha) async {
1313
HttpResponse response = HttpResponse();

lib/app/data/sources/remote/user.service.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
import 'package:flutter/material.dart';
12
import 'package:flutter_architecture/app/data/mappers/user.mapper.dart';
23
import 'package:flutter_architecture/app/domain/http_response.dart';
34
import 'package:flutter_architecture/core/di/http_client.dart';
4-
import 'package:flutter_architecture/core/di/service_locator.dart';
5+
import 'package:flutter_architecture/core/di/injector_provider.dart';
56

67
import './base/endpoints.dart' as Endpoints;
78

89
class UserService{
9-
final client = serviceLocator<HttpClient>();
10+
HttpClient client = inject<HttpClient>();
1011

1112
Future<HttpResponse> list() async {
1213
HttpResponse response = HttpResponse();

lib/app/ui/modules/authenticated/home/home.page.dart

+20-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import 'package:flutter/material.dart';
2+
import 'package:flutter_architecture/app/ui/modules/authenticated/home/home.viewmodel.dart';
23
import 'package:flutter_architecture/app/ui/modules/unauthenticated/login/login.page.dart';
34
import 'package:flutter_architecture/app/ui/widgets/button.dart';
45
import 'package:flutter_architecture/app/ui/widgets/text.dart';
6+
import 'package:flutter_architecture/core/di/injector_provider.dart';
57

68
import '../../../../../device/nav/nav_slide_from_left.dart';
79
import 'package:flutter_architecture/core/values/dimens.dart' as dimens;
@@ -12,21 +14,26 @@ class HomePage extends StatefulWidget {
1214
}
1315

1416
class _HomePageState extends State<HomePage> {
17+
final vm = inject<HomeViewModel>();
18+
1519
@override
1620
Widget build(BuildContext context) {
17-
return Container(
18-
child: Container(
19-
child: Column(
20-
children: <Widget>[
21-
TextWidget(text: "Home Page"),
22-
SizedBox(height: dimens.fieldSpace),
23-
ButtonWidget(
24-
label: "Go to Login Page",
25-
onPress: () => Navigator.pushReplacement(context, NavSlideFromLeft(
26-
page: LoginPage()
27-
)),
28-
)
29-
],
21+
return SafeArea(
22+
child: Scaffold(
23+
body: Center(
24+
child: Column(
25+
mainAxisAlignment: MainAxisAlignment.center,
26+
children: <Widget>[
27+
TextWidget(text: "Home Page"),
28+
SizedBox(height: dimens.fieldSpace),
29+
ButtonWidget(
30+
label: "Go to Login Page ",
31+
onPress: () => Navigator.pushReplacement(context, NavSlideFromLeft(
32+
page: LoginPage()
33+
)),
34+
)
35+
],
36+
),
3037
),
3138
),
3239
);
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
import 'package:flutter_architecture/core/base/view_model.base.dart';
2-
import 'package:mobx/mobx.dart';
32

4-
part 'home.viewmodel.g.dart';
5-
6-
class HomeViewModel = _HomeViewModelBase with _$HomeViewModel;
7-
8-
abstract class _HomeViewModelBase extends BaseViewModel with Store {
9-
3+
class HomeViewModel extends BaseViewModel {
4+
@override
5+
void clear() {
6+
// TODO: implement reset
7+
}
108
}

lib/app/ui/modules/authenticated/home/home.viewmodel.g.dart

-18
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import 'package:flutter/material.dart';
2-
import 'package:flutter_architecture/core/di/service_locator.dart';
3-
import 'package:flutter_mobx/flutter_mobx.dart';
42
import 'package:flutter_architecture/app/ui/components/loading.dart';
5-
import 'login.viewmodel.dart';
3+
import 'package:flutter_architecture/app/ui/modules/unauthenticated/login/login.viewmodel.dart';
4+
import 'package:flutter_architecture/core/di/injector_provider.dart';
65
import 'login.widget.dart';
76

87
class LoginPage extends StatefulWidget {
@@ -11,26 +10,29 @@ class LoginPage extends StatefulWidget {
1110
}
1211

1312
class _LoginPageState extends State<LoginPage> with LoginWidget {
13+
final vm = inject<LoginViewModel>();
1414
final _scaffoldKey = GlobalKey<ScaffoldState>();
15-
final vm = serviceLocator<LoginViewModel>();
1615

1716
@override
1817
Widget build(BuildContext context) {
19-
return Observer(builder: (_) {
20-
return LoadingWidget(
21-
message: "LoadingWidget message",
22-
status: vm.isLoading,
23-
child: SafeArea(
24-
child: Scaffold(
25-
key: _scaffoldKey,
26-
body: SingleChildScrollView(
27-
child: Container(
28-
child: form(context, _scaffoldKey)
29-
),
30-
)
31-
),
32-
)
33-
);
34-
});
18+
return StreamBuilder<Object>(
19+
stream: vm.loading,
20+
builder: (context, snapshot) {
21+
return LoadingWidget(
22+
message: "Loading message",
23+
status: snapshot.data,
24+
child: SafeArea(
25+
child: Scaffold(
26+
key: _scaffoldKey,
27+
body: SingleChildScrollView(
28+
child: Container(
29+
child: form(context, _scaffoldKey)
30+
),
31+
)
32+
),
33+
)
34+
);
35+
}
36+
);
3537
}
3638
}
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,41 @@
11
import 'package:flutter_architecture/app/data/auth.repository.dart';
22
import 'package:flutter_architecture/app/domain/http_response.dart';
33
import 'package:flutter_architecture/core/base/view_model.base.dart';
4-
import 'package:flutter_architecture/core/di/service_locator.dart';
5-
import 'package:mobx/mobx.dart';
4+
import 'package:flutter_architecture/core/di/injector_provider.dart';
5+
import 'package:rxdart/rxdart.dart';
66

7-
part 'login.viewmodel.g.dart';
8-
9-
class LoginViewModel = _LoginViewModelBase with _$LoginViewModel;
10-
11-
abstract class _LoginViewModelBase extends BaseViewModel with Store {
12-
final _uc = serviceLocator<AuthRepository>();
7+
class LoginViewModel extends BaseViewModel {
8+
AuthRepository repository = inject<AuthRepository>();
139

14-
@observable
15-
String login = "";
16-
17-
@action
18-
setLogin(String value) => login = value;
19-
20-
@observable
21-
String password = "";
10+
final _login = BehaviorSubject<String>.seeded("");
11+
final _password = BehaviorSubject<String>.seeded("");
12+
13+
Stream get login => _login.stream;
14+
void setLogin(String value) => _login.add(value);
2215

23-
@action
24-
setPassword(String value) => password = value;
16+
Stream get password => _password.stream;
17+
void setPassword(String value) => _password.add(value);
2518

2619
Future<bool> signIn() async {
2720
setLoading(true);
2821

29-
await Future.delayed(Duration(seconds: 2));
22+
await Future.delayed(Duration(seconds: 1));
3023

31-
HttpResponse ret = await _uc.login(login, password);
24+
HttpResponse ret = await repository.login(_login.value, _password.value);
3225

3326
setLoading(false);
3427

3528
if (ret.statusCode == 200) {
29+
clear();
3630
return true;
3731
}
3832

3933
return false;
4034
}
35+
36+
@override
37+
void clear() {
38+
_login.add("");
39+
_password.add("");
40+
}
4141
}

lib/app/ui/modules/unauthenticated/login/login.viewmodel.g.dart

-74
This file was deleted.

0 commit comments

Comments
 (0)