diff --git a/lib/main.dart b/lib/main.dart index 33b30fd..67df112 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -32,6 +32,7 @@ class MyApp extends StatelessWidget { ), debugShowCheckedModeBanner: false, routerConfig: router, + scaffoldMessengerKey: snackbarKey, ); } } diff --git a/lib/models/auth_model.dart b/lib/models/auth_model.dart new file mode 100644 index 0000000..317acf1 --- /dev/null +++ b/lib/models/auth_model.dart @@ -0,0 +1,27 @@ +class AuthModel { + String? message; + String? token; + int? userId; + String? userName; + String? userType; + + AuthModel({this.message, this.token, this.userId, this.userName, this.userType}); + + AuthModel.fromJson(Map json) { + message = json['message']; + token = json['token']; + userId = json['userId']; + userName = json['userName']; + userType = json['userType']; + } + + Map toJson() { + final Map data = {}; + data['message'] = message; + data['token'] = token; + data['userId'] = userId; + data['userName'] = userName; + data['userType'] = userType; + return data; + } +} diff --git a/lib/models/login_model.dart b/lib/models/login_model.dart deleted file mode 100644 index 0cb1f42..0000000 --- a/lib/models/login_model.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'dart:convert'; - -class LoginModel { - String? message; - String? token; - int? userId; - String? userName; - String? userType; - - LoginModel._(); - - bool get isLogged => token != null && token!.isNotEmpty; - - String get loginMessage => message ?? ""; - - String get userRole => userType == "A" - ? "Administrador" - : userType == "R" - ? "Revendedor" - : "Usuário"; - - Map toMap() { - return { - 'token': token, - }; - } - - static LoginModel instance = LoginModel._(); - - factory LoginModel.fromMap(Map map) { - var authModel = LoginModel._(); - authModel.message = map['message'] as String; - authModel.token = map['token'] as String; - authModel.userId = map['userId'] as int; - authModel.userName = map['userName'] as String; - authModel.userType = map['userType'] as String; - return authModel; - } - - String toJson() => json.encode(toMap()); - - factory LoginModel.fromJson(String source) => LoginModel.fromMap(json.decode(source) as Map); - - @override - bool operator ==(covariant LoginModel other) { - if (identical(this, other)) return true; - - return other.token == token; - } - - @override - int get hashCode => token.hashCode; -} diff --git a/lib/pages/login_page.dart b/lib/pages/login_page.dart index 42f06b3..0f14ddc 100644 --- a/lib/pages/login_page.dart +++ b/lib/pages/login_page.dart @@ -1,15 +1,11 @@ import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:pcastlivetv/components/nc_form_field.dart'; import 'package:pcastlivetv/routes.dart'; -import 'package:pcastlivetv/services/snackbar_service.dart'; import 'package:pcastlivetv/stores/login_store.dart'; import 'package:validatorless/validatorless.dart'; import 'package:velocity_x/velocity_x.dart'; -// import 'package:velocity_x/velocity_x.dart'; - -import '../components/nc_form_field.dart'; -// import '../stores/login_store.dart'; - class LoginPage extends StatefulWidget { const LoginPage({super.key}); @@ -95,7 +91,21 @@ class _LoginPageState extends State { ), ), onPressed: () async { - await verifyLogin(formKey, store, email, password); + var result = await processAuth(formKey, store, email, password); + if (result) { + router.go('/user'); + } else { + Fluttertoast.showToast( + msg: store.message!, + toastLength: Toast.LENGTH_LONG, + webBgColor: "linear-gradient(to right, #ff0000, #ff0000)", + webPosition: "center", + gravity: ToastGravity.BOTTOM, + timeInSecForIosWeb: 1, + backgroundColor: Colors.red, + textColor: Colors.white, + fontSize: 32); + } }, child: const Padding( padding: EdgeInsets.all(8.0), @@ -116,10 +126,6 @@ class _LoginPageState extends State { ); } - Future verifyLogin(GlobalKey formKey, LoginStore store, String email, String password) async { - processAuth(formKey, store, email, password); - } - Future processAuth(GlobalKey formKey, LoginStore store, String email, String password) async { Function? close; if (formKey.currentState!.validate()) { @@ -137,20 +143,25 @@ class _LoginPageState extends State { close(); if (store.isLogged) { - SnackBarService.showSnackBar(content: "Login efetuado com sucesso!", error: false); - router.go('/home'); return true; } if (store.message != "") { - SnackBarService.showSnackBar(content: store.message!, error: true); return false; } } catch (e) { close!(); - SnackBarService.showSnackBar(content: e.toString().replaceAll("Exception: ", ""), error: true); - return false; + Fluttertoast.showToast( + msg: e.toString().replaceAll("Exception: ", ""), + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.BOTTOM, + timeInSecForIosWeb: 1, + backgroundColor: Colors.red, + textColor: Colors.white, + fontSize: 16.0); } + // SnackBarService.showSnackBar(content: e.toString().replaceAll("Exception: ", ""), error: true); + return false; } return false; } diff --git a/lib/pages/user_page.dart b/lib/pages/user_page.dart new file mode 100644 index 0000000..dffeab0 --- /dev/null +++ b/lib/pages/user_page.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; +import 'package:pcastlivetv/components/nc_base_page.dart'; + +class UserPage extends StatelessWidget { + const UserPage({super.key}); + + @override + Widget build(BuildContext context) { + return const NcBasePage( + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text("User Page"), + ], + ), + ), + ); + } +} diff --git a/lib/routes.dart b/lib/routes.dart index 6d3066d..cb7e5fe 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -1,6 +1,7 @@ import 'package:go_router/go_router.dart'; import 'package:pcastlivetv/pages/initial_page.dart'; import 'package:pcastlivetv/pages/login_page.dart'; +import 'package:pcastlivetv/pages/user_page.dart'; import 'pages/register_page.dart'; @@ -23,5 +24,10 @@ final router = GoRouter( path: '/register', builder: (context, state) => const RegisterPage(), ), + GoRoute( + name: 'user', + path: '/user', + builder: (context, state) => const UserPage(), + ), ], ); diff --git a/lib/services/login_service.dart b/lib/services/login_service.dart index 224d824..75d6b68 100644 --- a/lib/services/login_service.dart +++ b/lib/services/login_service.dart @@ -3,10 +3,10 @@ import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:pcastlivetv/globals.dart'; -import '../models/login_model.dart'; +import '../models/auth_model.dart'; class AuthService { - Future login(String email, String password) async { + Future login(String email, String password) async { final dio = Dio(); try { final data = { @@ -26,13 +26,14 @@ class AuthService { switch (response.statusCode) { case 200: - print(jsonDecode(response.data)); - var authModel = LoginModel.fromJson(jsonDecode(response.data)); + var authModel = AuthModel.fromJson(response.data); return authModel; default: + print('Erro inesperado no login: ${response.statusCode} - ${response.data.toString()}'); throw Exception('Erro inesperado no login: ${response.statusCode} - ${response.data.toString()}'); } } on Exception catch (e) { + print('Exception inesperada no login: $e'); throw Exception('Exception inesperada no login: $e'); } } diff --git a/pubspec.lock b/pubspec.lock index ea93242..2782f53 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -96,6 +96,14 @@ packages: description: flutter source: sdk version: "0.0.0" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + sha256: "474f7d506230897a3cd28c965ec21c5328ae5605fc9c400cd330e9e9d6ac175c" + url: "https://pub.dev" + source: hosted + version: "8.2.2" go_router: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index e2ad977..173d2a2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,6 +19,7 @@ dependencies: flutter_web_plugins: sdk: flutter dio: ^5.3.2 + fluttertoast: ^8.2.2 dev_dependencies: flutter_test: