login working (missing correct navigation)
parent
06a352d8bf
commit
8328b7af4c
|
|
@ -32,6 +32,7 @@ class MyApp extends StatelessWidget {
|
||||||
),
|
),
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
routerConfig: router,
|
routerConfig: router,
|
||||||
|
scaffoldMessengerKey: snackbarKey,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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(),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -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');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue