diff --git a/lib/api/repositories/user_repository.dart b/lib/api/repositories/user_repository.dart index 5736197..58345ed 100644 --- a/lib/api/repositories/user_repository.dart +++ b/lib/api/repositories/user_repository.dart @@ -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 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']); diff --git a/lib/src/app/login/login_page.dart b/lib/src/app/login/login_page.dart index bcb9ced..2919fc4 100644 --- a/lib/src/app/login/login_page.dart +++ b/lib/src/app/login/login_page.dart @@ -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'; @@ -164,22 +165,29 @@ class LoginPageState extends State { ), ), 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( - 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', diff --git a/lib/src/app/splash_page.dart b/lib/src/app/splash_page.dart index e9370f0..d9316bd 100644 --- a/lib/src/app/splash_page.dart +++ b/lib/src/app/splash_page.dart @@ -13,8 +13,12 @@ class SplashPage extends StatefulWidget { class SplashPageState extends State { @override - Future initState() async { + void initState() { super.initState(); + _initialize(); + } + + Future _initialize() async { UserViewModel userRepository = UserViewModel(UserRepository()); bool isLogged = await userRepository.repository.checkToken(); diff --git a/test/src/app/login/login_controller_test.dart b/test/src/app/login/login_controller_test.dart new file mode 100644 index 0000000..c77c88e --- /dev/null +++ b/test/src/app/login/login_controller_test.dart @@ -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('joaoaugusto@gmail.com', '123456'); + + if (kDebugMode) { + print(user.toJson()); + } + expect(user.email, 'joaoaugusto@gmail.com'); + }); +}