login and begin listView
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_mssql_node_filament_app/helpers/services_repos.dart';
|
||||
import 'package:flutter_mssql_node_filament_app/pages/list_view.dart';
|
||||
import 'package:flutter_mssql_node_filament_app/pages/signin_view.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import '../helpers/services_repos.dart';
|
||||
import '../pages/list_view.dart';
|
||||
import '../pages/signin_view.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class HomeController extends GetxController {
|
||||
final benutzerController = TextEditingController();
|
||||
final passwordController = TextEditingController();
|
||||
final serviceRepos = ServiceRepos();
|
||||
final serviceRepos = ServiceRepos(httpClient: http.Client());
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
@@ -41,10 +42,10 @@ class HomeController extends GetxController {
|
||||
if (!validateLogin()) return;
|
||||
String benutzer = benutzerController.text.trim();
|
||||
String password = passwordController.text.trim();
|
||||
var response = await serviceRepos.getUserIsValide(benutzer, password);
|
||||
if (response.statusCode == 200 && response.body['valid'] == true) {
|
||||
var user = await serviceRepos.loginService(benutzer, password);
|
||||
if (user.uuid != '') {
|
||||
// Navigiere zur Listenseite
|
||||
Get.offAllNamed(ListPage.namedRoute);
|
||||
Get.offAllNamed(ListPage.namedRoute, arguments: user.username);
|
||||
} else {
|
||||
Get.snackbar(
|
||||
'Fehler',
|
||||
|
||||
@@ -1,11 +1,16 @@
|
||||
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../pages/home_view.dart';
|
||||
|
||||
class ListController extends GetxController {
|
||||
|
||||
final username = ''.obs;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
username(Get.arguments ?? '');
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -14,5 +19,9 @@ class ListController extends GetxController {
|
||||
super.onClose();
|
||||
}
|
||||
|
||||
void exitApp() {
|
||||
Get.offAllNamed(HomePage.namedRoute);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,32 +1,43 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'dart:convert';
|
||||
|
||||
class ServiceRepos extends GetConnect {
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
// Setze die Basis-URL für deine API
|
||||
httpClient.baseUrl = 'https://node.joshihomeserver.ipv64.net/api';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import '../models/user_model.dart';
|
||||
|
||||
class ServiceRepos{
|
||||
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) =>
|
||||
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);
|
||||
}
|
||||
});
|
||||
final responseUser = await getUsersList();
|
||||
|
||||
Future<Response> getFilamentsList(String username) =>
|
||||
post('$baseUrl/GetFilamentDataByUser', {'username': username});
|
||||
}
|
||||
if (responseUser.statusCode != 200) {
|
||||
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
|
||||
factory FilamentModel.fromJson(Map<String, dynamic> json) {
|
||||
return FilamentModel(
|
||||
id: json['id'] as String,
|
||||
name: json['name'] as String,
|
||||
type: json['type'] as String,
|
||||
color: json['color'] as String,
|
||||
id: ( json['id'] as String).trim(),
|
||||
name: (json['name'] as String).trim(),
|
||||
type: (json['type'] as String).trim(),
|
||||
color: (json['color'] as String).trim(),
|
||||
weight: json['weight'] as int? ?? 0,
|
||||
weightUsed: json['weightUsed'] as int? ?? 0,
|
||||
price: (json['price'] as num).toDouble(),
|
||||
manufacturer: json['manufacturer'] as String?,
|
||||
purchaseDate: json['purchaseDate'] as String?,
|
||||
notes: json['notes'] as String?,
|
||||
manufacturer: (json['manufacturer'] as String?)?.trim(),
|
||||
purchaseDate: (json['purchaseDate'] as String?)?.trim(),
|
||||
notes: (json['notes'] as String?)?.trim(),
|
||||
pices: json['pices'] as int,
|
||||
printingTemp: json['printingTemp'] as int,
|
||||
bedTemp: json['bedTemp'] as int,
|
||||
|
||||
@@ -33,9 +33,9 @@ class UserModel {
|
||||
|
||||
factory UserModel.fromMap(Map<String, dynamic> map) {
|
||||
return UserModel(
|
||||
uuid: map['pk_userUuid'] as String,
|
||||
username: map['benutzer'] as String,
|
||||
passwort: map['kennwort'] as String,
|
||||
uuid: (map['pk_userUuid'] as String).trim(),
|
||||
username: (map['benutzer'] as String).trim(),
|
||||
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 '../controllers/list_controller.dart';
|
||||
@@ -9,7 +9,36 @@ class ListPage extends GetView<ListController> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var maxWidth = MediaQuery.sizeOf(context).width;
|
||||
var maxHeight = MediaQuery.sizeOf(context).height;
|
||||
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)),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user