login working (missing correct navigation)

main
Nilo Roberto C Paim 2023-08-30 17:35:16 -03:00
parent 06a352d8bf
commit 8328b7af4c
9 changed files with 95 additions and 73 deletions

View File

@ -32,6 +32,7 @@ class MyApp extends StatelessWidget {
), ),
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
routerConfig: router, routerConfig: router,
scaffoldMessengerKey: snackbarKey,
); );
} }
} }

View File

@ -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<String, dynamic> json) {
message = json['message'];
token = json['token'];
userId = json['userId'];
userName = json['userName'];
userType = json['userType'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['message'] = message;
data['token'] = token;
data['userId'] = userId;
data['userName'] = userName;
data['userType'] = userType;
return data;
}
}

View File

@ -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<String, dynamic> toMap() {
return <String, dynamic>{
'token': token,
};
}
static LoginModel instance = LoginModel._();
factory LoginModel.fromMap(Map<String, dynamic> 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<String, dynamic>);
@override
bool operator ==(covariant LoginModel other) {
if (identical(this, other)) return true;
return other.token == token;
}
@override
int get hashCode => token.hashCode;
}

View File

@ -1,15 +1,11 @@
import 'package:flutter/material.dart'; 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/routes.dart';
import 'package:pcastlivetv/services/snackbar_service.dart';
import 'package:pcastlivetv/stores/login_store.dart'; import 'package:pcastlivetv/stores/login_store.dart';
import 'package:validatorless/validatorless.dart'; import 'package:validatorless/validatorless.dart';
import 'package:velocity_x/velocity_x.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 { class LoginPage extends StatefulWidget {
const LoginPage({super.key}); const LoginPage({super.key});
@ -95,7 +91,21 @@ class _LoginPageState extends State<LoginPage> {
), ),
), ),
onPressed: () async { 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( child: const Padding(
padding: EdgeInsets.all(8.0), padding: EdgeInsets.all(8.0),
@ -116,10 +126,6 @@ class _LoginPageState extends State<LoginPage> {
); );
} }
Future<void> verifyLogin(GlobalKey<FormState> formKey, LoginStore store, String email, String password) async {
processAuth(formKey, store, email, password);
}
Future<bool> processAuth(GlobalKey<FormState> formKey, LoginStore store, String email, String password) async { Future<bool> processAuth(GlobalKey<FormState> formKey, LoginStore store, String email, String password) async {
Function? close; Function? close;
if (formKey.currentState!.validate()) { if (formKey.currentState!.validate()) {
@ -137,20 +143,25 @@ class _LoginPageState extends State<LoginPage> {
close(); close();
if (store.isLogged) { if (store.isLogged) {
SnackBarService.showSnackBar(content: "Login efetuado com sucesso!", error: false);
router.go('/home');
return true; return true;
} }
if (store.message != "") { if (store.message != "") {
SnackBarService.showSnackBar(content: store.message!, error: true);
return false; return false;
} }
} catch (e) { } catch (e) {
close!(); close!();
SnackBarService.showSnackBar(content: e.toString().replaceAll("Exception: ", ""), error: true); Fluttertoast.showToast(
return false; 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; return false;
} }

20
lib/pages/user_page.dart Normal file
View File

@ -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"),
],
),
),
);
}
}

View File

@ -1,6 +1,7 @@
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:pcastlivetv/pages/initial_page.dart'; import 'package:pcastlivetv/pages/initial_page.dart';
import 'package:pcastlivetv/pages/login_page.dart'; import 'package:pcastlivetv/pages/login_page.dart';
import 'package:pcastlivetv/pages/user_page.dart';
import 'pages/register_page.dart'; import 'pages/register_page.dart';
@ -23,5 +24,10 @@ final router = GoRouter(
path: '/register', path: '/register',
builder: (context, state) => const RegisterPage(), builder: (context, state) => const RegisterPage(),
), ),
GoRoute(
name: 'user',
path: '/user',
builder: (context, state) => const UserPage(),
),
], ],
); );

View File

@ -3,10 +3,10 @@ import 'dart:convert';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:pcastlivetv/globals.dart'; import 'package:pcastlivetv/globals.dart';
import '../models/login_model.dart'; import '../models/auth_model.dart';
class AuthService { class AuthService {
Future<LoginModel> login(String email, String password) async { Future<AuthModel> login(String email, String password) async {
final dio = Dio(); final dio = Dio();
try { try {
final data = { final data = {
@ -26,13 +26,14 @@ class AuthService {
switch (response.statusCode) { switch (response.statusCode) {
case 200: case 200:
print(jsonDecode(response.data)); var authModel = AuthModel.fromJson(response.data);
var authModel = LoginModel.fromJson(jsonDecode(response.data));
return authModel; return authModel;
default: default:
print('Erro inesperado no login: ${response.statusCode} - ${response.data.toString()}');
throw Exception('Erro inesperado no login: ${response.statusCode} - ${response.data.toString()}'); throw Exception('Erro inesperado no login: ${response.statusCode} - ${response.data.toString()}');
} }
} on Exception catch (e) { } on Exception catch (e) {
print('Exception inesperada no login: $e');
throw Exception('Exception inesperada no login: $e'); throw Exception('Exception inesperada no login: $e');
} }
} }

View File

@ -96,6 +96,14 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" 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: go_router:
dependency: "direct main" dependency: "direct main"
description: description:

View File

@ -19,6 +19,7 @@ dependencies:
flutter_web_plugins: flutter_web_plugins:
sdk: flutter sdk: flutter
dio: ^5.3.2 dio: ^5.3.2
fluttertoast: ^8.2.2
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: