login and begin listView
This commit is contained in:
@@ -1,13 +1,14 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_mssql_node_filament_app/helpers/services_repos.dart';
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:flutter_mssql_node_filament_app/pages/list_view.dart';
|
import '../helpers/services_repos.dart';
|
||||||
import 'package:flutter_mssql_node_filament_app/pages/signin_view.dart';
|
import '../pages/list_view.dart';
|
||||||
|
import '../pages/signin_view.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
class HomeController extends GetxController {
|
class HomeController extends GetxController {
|
||||||
final benutzerController = TextEditingController();
|
final benutzerController = TextEditingController();
|
||||||
final passwordController = TextEditingController();
|
final passwordController = TextEditingController();
|
||||||
final serviceRepos = ServiceRepos();
|
final serviceRepos = ServiceRepos(httpClient: http.Client());
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
@@ -41,10 +42,10 @@ class HomeController extends GetxController {
|
|||||||
if (!validateLogin()) return;
|
if (!validateLogin()) return;
|
||||||
String benutzer = benutzerController.text.trim();
|
String benutzer = benutzerController.text.trim();
|
||||||
String password = passwordController.text.trim();
|
String password = passwordController.text.trim();
|
||||||
var response = await serviceRepos.getUserIsValide(benutzer, password);
|
var user = await serviceRepos.loginService(benutzer, password);
|
||||||
if (response.statusCode == 200 && response.body['valid'] == true) {
|
if (user.uuid != '') {
|
||||||
// Navigiere zur Listenseite
|
// Navigiere zur Listenseite
|
||||||
Get.offAllNamed(ListPage.namedRoute);
|
Get.offAllNamed(ListPage.namedRoute, arguments: user.username);
|
||||||
} else {
|
} else {
|
||||||
Get.snackbar(
|
Get.snackbar(
|
||||||
'Fehler',
|
'Fehler',
|
||||||
|
|||||||
@@ -1,11 +1,16 @@
|
|||||||
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
|
import '../pages/home_view.dart';
|
||||||
|
|
||||||
class ListController extends GetxController {
|
class ListController extends GetxController {
|
||||||
|
|
||||||
|
final username = ''.obs;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
|
username(Get.arguments ?? '');
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -14,5 +19,9 @@ class ListController extends GetxController {
|
|||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void exitApp() {
|
||||||
|
Get.offAllNamed(HomePage.namedRoute);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,32 +1,43 @@
|
|||||||
import 'package:get/get.dart';
|
import 'dart:convert';
|
||||||
|
|
||||||
class ServiceRepos extends GetConnect {
|
import 'package:get/get.dart';
|
||||||
@override
|
import 'package:http/http.dart' as http;
|
||||||
void onInit() {
|
import '../models/user_model.dart';
|
||||||
super.onInit();
|
|
||||||
// Setze die Basis-URL für deine API
|
class ServiceRepos{
|
||||||
httpClient.baseUrl = 'https://node.joshihomeserver.ipv64.net/api';
|
final http.Client httpClient;
|
||||||
|
final String baseUrl = 'https://node.joshihomeserver.ipv64.net/api';
|
||||||
|
|
||||||
|
ServiceRepos({required this.httpClient});
|
||||||
|
|
||||||
|
Future<http.Response> getUsersList() {
|
||||||
|
return httpClient.get(
|
||||||
|
Uri.parse('$baseUrl/GetFilamentUsers'),
|
||||||
|
headers: {'Content-Type': 'application/json'},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Response> getUsersList() => get('$baseUrl/GetFilamentUsers', headers: {'Content-Type': 'application/json'});
|
Future<UserModel> loginService(String username, String password) async {
|
||||||
|
|
||||||
Future<Response> getUserIsValide(String username, String password) =>
|
final responseUser = await getUsersList();
|
||||||
getUsersList().then((response) {
|
|
||||||
if (response.statusCode == 200 && response.body is List) {
|
|
||||||
final users = response.body as List;
|
|
||||||
final user = users.firstWhere(
|
|
||||||
(u) => u['benutzer'] == username && u['kennwort'] == password,
|
|
||||||
orElse: () => null,
|
|
||||||
);
|
|
||||||
return Response(
|
|
||||||
statusCode: user != null ? 200 : 401,
|
|
||||||
body: user != null ? {'valid': true} : {'valid': false},
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return Response(statusCode: response.statusCode, body: response.body);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Future<Response> getFilamentsList(String username) =>
|
if (responseUser.statusCode != 200) {
|
||||||
post('$baseUrl/GetFilamentDataByUser', {'username': username});
|
return UserModel(uuid: '', username: '', passwort: '');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final users = responseUser.body.isNotEmpty
|
||||||
|
? List<Map<String, dynamic>>.from(json.decode(responseUser.body))
|
||||||
|
: <Map<String, dynamic>>[];
|
||||||
|
|
||||||
|
List<UserModel> userModels = users.map((u) => UserModel.fromMap(u)).toList();
|
||||||
|
|
||||||
|
final UserModel? searchUser = userModels.firstWhereOrNull(
|
||||||
|
(u) => u.username == username && u.passwort == password);
|
||||||
|
|
||||||
|
if (searchUser == null || searchUser.uuid.isEmpty) {
|
||||||
|
return UserModel(uuid: '', username: '', passwort: '');
|
||||||
|
}
|
||||||
|
|
||||||
|
return searchUser;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -53,16 +53,16 @@ class FilamentModel {
|
|||||||
// JSON Deserialisierung
|
// JSON Deserialisierung
|
||||||
factory FilamentModel.fromJson(Map<String, dynamic> json) {
|
factory FilamentModel.fromJson(Map<String, dynamic> json) {
|
||||||
return FilamentModel(
|
return FilamentModel(
|
||||||
id: json['id'] as String,
|
id: ( json['id'] as String).trim(),
|
||||||
name: json['name'] as String,
|
name: (json['name'] as String).trim(),
|
||||||
type: json['type'] as String,
|
type: (json['type'] as String).trim(),
|
||||||
color: json['color'] as String,
|
color: (json['color'] as String).trim(),
|
||||||
weight: json['weight'] as int? ?? 0,
|
weight: json['weight'] as int? ?? 0,
|
||||||
weightUsed: json['weightUsed'] as int? ?? 0,
|
weightUsed: json['weightUsed'] as int? ?? 0,
|
||||||
price: (json['price'] as num).toDouble(),
|
price: (json['price'] as num).toDouble(),
|
||||||
manufacturer: json['manufacturer'] as String?,
|
manufacturer: (json['manufacturer'] as String?)?.trim(),
|
||||||
purchaseDate: json['purchaseDate'] as String?,
|
purchaseDate: (json['purchaseDate'] as String?)?.trim(),
|
||||||
notes: json['notes'] as String?,
|
notes: (json['notes'] as String?)?.trim(),
|
||||||
pices: json['pices'] as int,
|
pices: json['pices'] as int,
|
||||||
printingTemp: json['printingTemp'] as int,
|
printingTemp: json['printingTemp'] as int,
|
||||||
bedTemp: json['bedTemp'] as int,
|
bedTemp: json['bedTemp'] as int,
|
||||||
|
|||||||
@@ -33,9 +33,9 @@ class UserModel {
|
|||||||
|
|
||||||
factory UserModel.fromMap(Map<String, dynamic> map) {
|
factory UserModel.fromMap(Map<String, dynamic> map) {
|
||||||
return UserModel(
|
return UserModel(
|
||||||
uuid: map['pk_userUuid'] as String,
|
uuid: (map['pk_userUuid'] as String).trim(),
|
||||||
username: map['benutzer'] as String,
|
username: (map['benutzer'] as String).trim(),
|
||||||
passwort: map['kennwort'] as String,
|
passwort: (map['kennwort'] as String).trim(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import '../controllers/list_controller.dart';
|
import '../controllers/list_controller.dart';
|
||||||
@@ -9,7 +9,36 @@ class ListPage extends GetView<ListController> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
var maxWidth = MediaQuery.sizeOf(context).width;
|
||||||
|
var maxHeight = MediaQuery.sizeOf(context).height;
|
||||||
var listCtrl = controller;
|
var listCtrl = controller;
|
||||||
return const Placeholder();
|
return Obx(
|
||||||
|
() => SafeArea(
|
||||||
|
child: Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
backgroundColor: Get.theme.colorScheme.primary,
|
||||||
|
foregroundColor: Get.theme.colorScheme.onPrimary,
|
||||||
|
title: Text('Liste'),
|
||||||
|
centerTitle: true,
|
||||||
|
actions: [IconButton(onPressed: () => listCtrl.exitApp(), icon: Icon(Icons.logout))],
|
||||||
|
),
|
||||||
|
body: Container(
|
||||||
|
width: maxWidth,
|
||||||
|
height: maxHeight,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
gradient: LinearGradient(
|
||||||
|
colors: [
|
||||||
|
Get.theme.colorScheme.primary.withAlpha(26),
|
||||||
|
Get.theme.colorScheme.primary.withAlpha(13),
|
||||||
|
],
|
||||||
|
begin: Alignment.topLeft,
|
||||||
|
end: Alignment.bottomRight,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Center(child: Text(listCtrl.username.value)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
24
pubspec.lock
24
pubspec.lock
@@ -83,6 +83,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.7.3"
|
version: "4.7.3"
|
||||||
|
http:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: http
|
||||||
|
sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.6.0"
|
||||||
|
http_parser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http_parser
|
||||||
|
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.1.2"
|
||||||
intl:
|
intl:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -208,6 +224,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.10"
|
version: "0.7.10"
|
||||||
|
typed_data:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: typed_data
|
||||||
|
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.0"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ dependencies:
|
|||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
get: ^4.7.3
|
get: ^4.7.3
|
||||||
|
http: ^1.6.0
|
||||||
intl: ^0.20.2
|
intl: ^0.20.2
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
|
|||||||
Reference in New Issue
Block a user