add login

This commit is contained in:
atseirjo
2025-10-22 08:43:20 +02:00
parent b6bd692cd7
commit c0960cbd9f
21 changed files with 1128 additions and 221 deletions

View File

@@ -1,6 +1,8 @@
import 'package:get/get.dart';
import 'package:geolocator/geolocator.dart';
import '../../services/geolocation.dart';
import '../models/ptv_logistic_model.dart';
import '../services/ptv_api_simple.dart';
/// GetX Controller für Geolocation Funktionalität
class GeolocationController extends GetxController {
@@ -9,12 +11,14 @@ class GeolocationController extends GetxController {
final _statusText = 'Noch keine Position ermittelt'.obs;
final _isTracking = false.obs;
final _isLoading = false.obs;
final _ptvModel = Rxn<PTVModel>();
// Getter für reactive Variablen
Position? get currentPosition => _currentPosition.value;
String get statusText => _statusText.value;
bool get isTracking => _isTracking.value;
bool get isLoading => _isLoading.value;
PTVModel? get ptvModel => _ptvModel.value;
@override
void onClose() {
@@ -34,7 +38,15 @@ class GeolocationController extends GetxController {
if (position != null) {
_currentPosition.value = position;
_statusText.value = GeolocationService.positionToString(position);
var resultData = await PtvApiServiceSimple.getLocationsByPosition(
latitude: position.latitude,
longitude: position.longitude,
);
if(resultData != null) {
_ptvModel.value = PTVModel.fromJson(resultData);
} else {
_ptvModel.value = null;
}
// Erfolgs-Snackbar anzeigen
Get.snackbar(
'Position ermittelt',

View File

@@ -0,0 +1,65 @@
import 'package:appwrite/appwrite.dart' as account_models;
import 'package:appwrite/models.dart' as user_models;
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:appwrite/appwrite.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
class LoginController extends GetxController {
final _account = Rxn<account_models.Account>();
final mailController = TextEditingController();
final passwordController = TextEditingController();
final nameController = TextEditingController();
final _endpoint = dotenv.env['APPWRITE_ENDPOINT_URL'] ?? '';
final _projectId = dotenv.env['APPWRITE_PROJECT_ID'] ?? '';
final _logedInUser = Rxn<user_models.User>();
account_models.Account? get account => _account.value;
user_models.User? get logedInUser => _logedInUser.value;
@override
void onInit() {
Client client = Client()
.setEndpoint(_endpoint)
.setProject(_projectId);
_account.value = Account(client);
super.onInit();
}
Future<void> login(String email, String password) async {
await _account.value!.createEmailPasswordSession(
email: email,
password: password,
);
final user = await _account.value!.get();
_logedInUser.value = user;
}
Future<void> register(String email, String password, String name) async {
await _account.value!.create(
userId: ID.unique(),
email: email,
password: password,
name: name,
);
await login(email, password);
}
Future<void> logout() async {
await _account.value!.deleteSession(sessionId: 'current');
_logedInUser.value = null;
}
@override
void onClose() {
mailController.dispose();
passwordController.dispose();
nameController.dispose();
super.onClose();
}
}