From da7f59f47e754ba172567acb07b3668684e897d4 Mon Sep 17 00:00:00 2001 From: joshiadmin Date: Sat, 11 Apr 2026 00:05:06 +0200 Subject: [PATCH] login and begin listView --- lib/controllers/home_controller.dart | 15 ++++--- lib/controllers/list_controller.dart | 9 ++++ lib/helpers/services_repos.dart | 65 ++++++++++++++++------------ lib/models/filament_model.dart | 14 +++--- lib/models/user_model.dart | 6 +-- lib/pages/list_view.dart | 35 +++++++++++++-- pubspec.lock | 24 ++++++++++ pubspec.yaml | 1 + 8 files changed, 122 insertions(+), 47 deletions(-) diff --git a/lib/controllers/home_controller.dart b/lib/controllers/home_controller.dart index 5a68063..d959ab0 100644 --- a/lib/controllers/home_controller.dart +++ b/lib/controllers/home_controller.dart @@ -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', diff --git a/lib/controllers/list_controller.dart b/lib/controllers/list_controller.dart index 4768cad..a8e93e3 100644 --- a/lib/controllers/list_controller.dart +++ b/lib/controllers/list_controller.dart @@ -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); + } + } diff --git a/lib/helpers/services_repos.dart b/lib/helpers/services_repos.dart index 1a333bb..89ee4e0 100644 --- a/lib/helpers/services_repos.dart +++ b/lib/helpers/services_repos.dart @@ -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 getUsersList() { + return httpClient.get( + Uri.parse('$baseUrl/GetFilamentUsers'), + headers: {'Content-Type': 'application/json'}, + ); } - Future getUsersList() => get('$baseUrl/GetFilamentUsers', headers: {'Content-Type': 'application/json'}); + Future loginService(String username, String password) async { - Future 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 getFilamentsList(String username) => - post('$baseUrl/GetFilamentDataByUser', {'username': username}); -} + if (responseUser.statusCode != 200) { + return UserModel(uuid: '', username: '', passwort: ''); + } + + final users = responseUser.body.isNotEmpty + ? List>.from(json.decode(responseUser.body)) + : >[]; + + List 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; + } +} \ No newline at end of file diff --git a/lib/models/filament_model.dart b/lib/models/filament_model.dart index 710e066..e16e0ec 100644 --- a/lib/models/filament_model.dart +++ b/lib/models/filament_model.dart @@ -53,16 +53,16 @@ class FilamentModel { // JSON Deserialisierung factory FilamentModel.fromJson(Map 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, diff --git a/lib/models/user_model.dart b/lib/models/user_model.dart index 442b4d9..90d1169 100644 --- a/lib/models/user_model.dart +++ b/lib/models/user_model.dart @@ -33,9 +33,9 @@ class UserModel { factory UserModel.fromMap(Map 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(), ); } diff --git a/lib/pages/list_view.dart b/lib/pages/list_view.dart index a674610..8b3e571 100644 --- a/lib/pages/list_view.dart +++ b/lib/pages/list_view.dart @@ -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 { @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)), + ), + ), + ), + ); } -} \ No newline at end of file +} diff --git a/pubspec.lock b/pubspec.lock index 8789be8..1c55c83 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -83,6 +83,22 @@ packages: url: "https://pub.dev" source: hosted 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: dependency: "direct main" description: @@ -208,6 +224,14 @@ packages: url: "https://pub.dev" source: hosted 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: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 2989466..e62b95c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,6 +13,7 @@ dependencies: flutter: sdk: flutter get: ^4.7.3 + http: ^1.6.0 intl: ^0.20.2 dev_dependencies: