Skip to content

Commit

Permalink
feat: Refactor Dio client initialization in UserRepository
Browse files Browse the repository at this point in the history
The Dio client initialization in the UserRepository class has been refactored to use the BaseOptions constructor. This change improves code readability and ensures consistent configuration of the client.
  • Loading branch information
Polabiel committed Aug 2, 2024
1 parent 7233105 commit 70bfbfc
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 21 deletions.
23 changes: 13 additions & 10 deletions lib/api/repositories/user_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,26 @@ import 'package:gohealth/api/services/shared_local_storage_service.dart';
class UserRepository implements IUser {
late final Dio client;

final String? baseUrl = dotenv.env['BASE_URL'];
final String baseUrl = dotenv.env['BASE_URL'] ?? 'http://192.168.18.242:3000';
final String? jwtSecret = dotenv.env['JWT_SECRET'];

UserRepository() {
client = Dio();
client = Dio(BaseOptions(
baseUrl: baseUrl,
connectTimeout: const Duration(milliseconds: 5000), // 5 seconds
receiveTimeout: const Duration(microseconds: 3000), // 3 segundos
headers: {
'Content-Type': 'application/json',
},
));
}

@override
Future<UserModels> authenticate(String email, String password) async {
var response = await client.post('$baseUrl/user/login',
data: {
'email': email,
'password': password,
},
options: Options(headers: {
'Authorization': jwtSecret,
}));
var response = await client.post('$baseUrl/user/login', data: {
'email': email,
'password': password,
});

UserModels model = UserModels.fromJson(response.data['user']);
SharedLocalStorageService().put('token', response.data['token']);
Expand Down
28 changes: 18 additions & 10 deletions lib/src/app/login/login_page.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:gohealth/api/layout/user_view_model.dart';
import 'package:gohealth/api/models/user_models.dart';
import 'package:gohealth/api/services/shared_local_storage_service.dart';
import 'package:gohealth/src/app/home/home_page.dart';
import 'package:gohealth/src/app/login/login_controller.dart';
import 'package:gohealth/src/app/register/register_page.dart';
Expand Down Expand Up @@ -164,22 +165,29 @@ class LoginPageState extends State<LoginPage> {
),
),
onPressed: () async {
if (_formKey.currentState!.validate()) {
await _controller.login(
if (_formKey.currentState != null &&
_formKey.currentState!.validate()) {
print("Formulário validado com sucesso");
final user = await _controller.login(
_emailController.text, _passwordController.text);
}
ValueListenableBuilder<UserModels>(
valueListenable: _controller.userModels,
builder: (context, user, child) {
Navigator.pushReplacement(
print("Usuário retornado: ${user.id}");

if (user.id != null) {
await Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => const Homepage(),
),
);
return const SplashPage(); // Add a return statement here
},
);
} else {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Invalid email or password'),
backgroundColor: Colors.redAccent,
),
);
}
}
},
child: const Text(
'Login',
Expand Down
6 changes: 5 additions & 1 deletion lib/src/app/splash_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,12 @@ class SplashPage extends StatefulWidget {

class SplashPageState extends State<SplashPage> {
@override
Future<void> initState() async {
void initState() {
super.initState();
_initialize();
}

Future<void> _initialize() async {
UserViewModel userRepository = UserViewModel(UserRepository());
bool isLogged = await userRepository.repository.checkToken();

Expand Down
25 changes: 25 additions & 0 deletions test/src/app/login/login_controller_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import 'package:flutter/foundation.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:gohealth/api/layout/user_view_model.dart';
import 'package:gohealth/api/models/user_models.dart';
import 'package:gohealth/api/repositories/user_repository.dart';
import 'package:gohealth/src/app/login/login_controller.dart';

void main() async {
await dotenv.load(fileName: ".env");

final repository = UserViewModel(UserRepository());
var controller = LoginController(repository);

test(
'Teste apenas para saber se o login está funcionando como o UserViewModel',
() async {
UserModels user = await controller.login('[email protected]', '123456');

if (kDebugMode) {
print(user.toJson());
}
expect(user.email, '[email protected]');
});
}

0 comments on commit 70bfbfc

Please sign in to comment.