tankstop save Methode
This commit is contained in:
parent
3df1be39a8
commit
9c73361a2f
@ -2,3 +2,5 @@ APPWRITE_PROJECT_ID=<APPWRITE_PROJECT_ID>
|
|||||||
APPWRITE_PROJECT_NAME=<Flutter Projects Name>
|
APPWRITE_PROJECT_NAME=<Flutter Projects Name>
|
||||||
APPWRITE_PUBLIC_ENDPOINT=<YOUR_API_ENDPOINT/v1>
|
APPWRITE_PUBLIC_ENDPOINT=<YOUR_API_ENDPOINT/v1>
|
||||||
PTV_GEOLINK_API_KEY=<YOUR_GEOLINK_API_KEY>
|
PTV_GEOLINK_API_KEY=<YOUR_GEOLINK_API_KEY>
|
||||||
|
APPWRITE_DATABASE_ID=<DatabaseID>
|
||||||
|
APPWRITE_COLLECTION_ID=<Collection_ID>
|
||||||
@ -92,5 +92,15 @@ class AppwriteRepository {
|
|||||||
|
|
||||||
Future<models.User> get getCurrentUser => _account.get();
|
Future<models.User> get getCurrentUser => _account.get();
|
||||||
|
|
||||||
createTankStop(Map<String, dynamic> map) {}
|
// Tank Stop CRUD operations
|
||||||
|
// Create, Update, Get, List Tank Stops
|
||||||
|
Future<models.Document> createTankStop(Map map) async {
|
||||||
|
final response = await _databases.createDocument(
|
||||||
|
databaseId: dotenv.get('APPWRITE_DATABASE_ID'),
|
||||||
|
collectionId: dotenv.get('APPWRITE_COLLECTION_ID'),
|
||||||
|
documentId: ID.unique(),
|
||||||
|
data: map,
|
||||||
|
);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import 'package:appwrite/appwrite.dart';
|
|||||||
import 'package:appwrite/models.dart' as models;
|
import 'package:appwrite/models.dart' as models;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:get_storage/get_storage.dart';
|
||||||
|
|
||||||
import '../../data/repository/appwrite_repository.dart';
|
import '../../data/repository/appwrite_repository.dart';
|
||||||
import '../../utils/extensions/static_helper.dart';
|
import '../../utils/extensions/static_helper.dart';
|
||||||
@ -15,6 +16,8 @@ class LoginController extends GetxController {
|
|||||||
final formKey = GlobalKey<FormState>();
|
final formKey = GlobalKey<FormState>();
|
||||||
bool isFormValid = false;
|
bool isFormValid = false;
|
||||||
|
|
||||||
|
final _dataBox = GetStorage('MyUserStorage');
|
||||||
|
|
||||||
final emailController = TextEditingController();
|
final emailController = TextEditingController();
|
||||||
final passwordController = TextEditingController();
|
final passwordController = TextEditingController();
|
||||||
final nameController = TextEditingController();
|
final nameController = TextEditingController();
|
||||||
@ -23,6 +26,15 @@ class LoginController extends GetxController {
|
|||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
// Initialize any necessary data or state here
|
// Initialize any necessary data or state here
|
||||||
|
var isSessionId = _dataBox.hasData('sessionId');
|
||||||
|
if (isSessionId) {
|
||||||
|
// If session ID exists, navigate to TankPage
|
||||||
|
print('Session ID found, navigating to TankPage');
|
||||||
|
goToTankPage();
|
||||||
|
} else {
|
||||||
|
// If no session ID, initialize the login controller
|
||||||
|
print('No session ID found, initializing LoginController');
|
||||||
|
}
|
||||||
print('LoginController initialized');
|
print('LoginController initialized');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,14 +43,6 @@ class LoginController extends GetxController {
|
|||||||
super.onReady();
|
super.onReady();
|
||||||
// This method is called when the controller is ready
|
// This method is called when the controller is ready
|
||||||
print('LoginController is ready');
|
print('LoginController is ready');
|
||||||
if (StaticHelper.hasData()) {
|
|
||||||
// If session ID exists, navigate to TankPage
|
|
||||||
print('Session ID found, navigating to TankPage');
|
|
||||||
goToTankPage();
|
|
||||||
} else {
|
|
||||||
// If no session ID, initialize the login controller
|
|
||||||
print('No session ID found, initializing LoginController');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -115,9 +119,9 @@ class LoginController extends GetxController {
|
|||||||
'User was stored and Loggedin: ${userValue.name}, ${userValue.$id}, ${userValue.email}',
|
'User was stored and Loggedin: ${userValue.name}, ${userValue.$id}, ${userValue.email}',
|
||||||
);
|
);
|
||||||
// Store session ID in GetStorage
|
// Store session ID in GetStorage
|
||||||
StaticHelper.dataBox.write('userId', userValue.$id);
|
_dataBox.write('userId', userValue.$id);
|
||||||
StaticHelper.dataBox.write('userName', userValue.name);
|
_dataBox.write('userName', userValue.name);
|
||||||
StaticHelper.dataBox.write('userEmail', userValue.email);
|
_dataBox.write('userEmail', userValue.email);
|
||||||
// Go to TankPage
|
// Go to TankPage
|
||||||
goToTankPage();
|
goToTankPage();
|
||||||
message = 'Sie wurden registriert und Angemeldet!!';
|
message = 'Sie wurden registriert und Angemeldet!!';
|
||||||
@ -151,6 +155,21 @@ class LoginController extends GetxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _getCurrentLoggedinUser() async {
|
||||||
|
await _authRepository.getCurrentUser.then((models.User userValue) {
|
||||||
|
// GetStorage data storage
|
||||||
|
print(
|
||||||
|
'User was stored and Loggedin: ${userValue.name}, ${userValue.$id}, ${userValue.email}',
|
||||||
|
);
|
||||||
|
// Store session ID in GetStorage
|
||||||
|
_dataBox.write('userId', userValue.$id);
|
||||||
|
_dataBox.write('userName', userValue.name);
|
||||||
|
_dataBox.write('userEmail', userValue.email);
|
||||||
|
}).catchError((error) {
|
||||||
|
print('Fehler beim Abrufen des Benutzers: $error');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Login
|
// Login
|
||||||
Future<void> login() async {
|
Future<void> login() async {
|
||||||
message = 'NoMessage!';
|
message = 'NoMessage!';
|
||||||
@ -169,15 +188,17 @@ class LoginController extends GetxController {
|
|||||||
'password': passwordController.text,
|
'password': passwordController.text,
|
||||||
}).then((models.Session session) {
|
}).then((models.Session session) {
|
||||||
// Store session ID in GetStorage
|
// Store session ID in GetStorage
|
||||||
StaticHelper.dataBox.write('userId', session.$id);
|
_dataBox.write('sessionId', session.$id);
|
||||||
print('Session ID stored: ${StaticHelper.dataBox.read('sessinId')}');
|
print('Session ID stored: ${_dataBox.read('sessionId')}');
|
||||||
print(
|
print(
|
||||||
'Erfolgreich eingeloggt: ${session.$id}\n${session.providerUid}',
|
'Erfolgreich eingeloggt: ${session.$id}\n${session.providerUid}',
|
||||||
);
|
);
|
||||||
|
_getCurrentLoggedinUser().then((_) {
|
||||||
// Go to TankPage
|
// Go to TankPage
|
||||||
goToTankPage();
|
goToTankPage();
|
||||||
StaticHelper.getMySnackeBar(
|
StaticHelper.getMySnackeBar(
|
||||||
'Erfolg', 'Sie wurden Angemeldet!!', Colors.green);
|
'Erfolg', 'Sie wurden Angemeldet!!', Colors.green);
|
||||||
|
});
|
||||||
}).catchError((error) {
|
}).catchError((error) {
|
||||||
if (error is AppwriteException) {
|
if (error is AppwriteException) {
|
||||||
// Handle specific Appwrite exceptions
|
// Handle specific Appwrite exceptions
|
||||||
|
|||||||
@ -5,8 +5,7 @@ import 'package:geolocator/geolocator.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:get_storage/get_storage.dart';
|
import 'package:get_storage/get_storage.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:tankguru_flutter_app_appwrite/utils/extensions/static_helper.dart';
|
import '../../utils/extensions/static_helper.dart';
|
||||||
|
|
||||||
import '../../data/repository/location_repository.dart';
|
import '../../data/repository/location_repository.dart';
|
||||||
import '../../data/repository/appwrite_repository.dart';
|
import '../../data/repository/appwrite_repository.dart';
|
||||||
import '../login/login_view.dart';
|
import '../login/login_view.dart';
|
||||||
@ -36,6 +35,7 @@ class TankController extends GetxController {
|
|||||||
final kilometerStandEdittingController = TextEditingController();
|
final kilometerStandEdittingController = TextEditingController();
|
||||||
final mengeController = TextEditingController();
|
final mengeController = TextEditingController();
|
||||||
final pricePerLiterController = TextEditingController();
|
final pricePerLiterController = TextEditingController();
|
||||||
|
final ortController = TextEditingController();
|
||||||
|
|
||||||
final FocusNode firstFocusNode = FocusNode(); // Deklariere den FocusNode
|
final FocusNode firstFocusNode = FocusNode(); // Deklariere den FocusNode
|
||||||
|
|
||||||
@ -70,6 +70,7 @@ class TankController extends GetxController {
|
|||||||
// den Standort in der UI anzuzeigen oder an einen Server zu senden.
|
// den Standort in der UI anzuzeigen oder an einen Server zu senden.
|
||||||
var map = {'lat': latitude, 'lng': longitude};
|
var map = {'lat': latitude, 'lng': longitude};
|
||||||
rxOrtString.value = await _locationRepository.getNearbyLocation(map);
|
rxOrtString.value = await _locationRepository.getNearbyLocation(map);
|
||||||
|
ortController.text = rxOrtString.value;
|
||||||
// Print Standortinformationen in der Konsole
|
// Print Standortinformationen in der Konsole
|
||||||
print('Nearby Location: ${rxOrtString.value}');
|
print('Nearby Location: ${rxOrtString.value}');
|
||||||
print('Current Position: Latitude: $latitude, Longitude: $longitude');
|
print('Current Position: Latitude: $latitude, Longitude: $longitude');
|
||||||
@ -92,6 +93,7 @@ class TankController extends GetxController {
|
|||||||
kilometerStandEdittingController.clear();
|
kilometerStandEdittingController.clear();
|
||||||
mengeController.clear();
|
mengeController.clear();
|
||||||
pricePerLiterController.clear();
|
pricePerLiterController.clear();
|
||||||
|
ortController.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
String? validateKilometerStand(String? value) {
|
String? validateKilometerStand(String? value) {
|
||||||
@ -124,6 +126,13 @@ class TankController extends GetxController {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String? validateOrt(String? value) {
|
||||||
|
if (value == null || value.isEmpty) {
|
||||||
|
return 'Bitte Ort eingeben...';
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
//Go to Login Page
|
//Go to Login Page
|
||||||
void logoutSessionAndGoToLoginPage() async {
|
void logoutSessionAndGoToLoginPage() async {
|
||||||
// Handle logout logic here
|
// Handle logout logic here
|
||||||
@ -140,8 +149,8 @@ class TankController extends GetxController {
|
|||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
if (_dataBox.hasData('sessinId')) {
|
if (_dataBox.hasData('sessionId')) {
|
||||||
rxSessionIdString(_dataBox.read('sessinId').toString());
|
rxSessionIdString(_dataBox.read('sessionId').toString());
|
||||||
}
|
}
|
||||||
// Rufe den Standort direkt beim Initialisieren des Controllers ab, falls gewünscht.
|
// Rufe den Standort direkt beim Initialisieren des Controllers ab, falls gewünscht.
|
||||||
fetchCurrentLocation();
|
fetchCurrentLocation();
|
||||||
@ -171,6 +180,7 @@ class TankController extends GetxController {
|
|||||||
kilometerStandEdittingController.dispose();
|
kilometerStandEdittingController.dispose();
|
||||||
mengeController.dispose();
|
mengeController.dispose();
|
||||||
pricePerLiterController.dispose();
|
pricePerLiterController.dispose();
|
||||||
|
ortController.dispose();
|
||||||
firstFocusNode.dispose(); // Dispose den FocusNode
|
firstFocusNode.dispose(); // Dispose den FocusNode
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,18 +216,10 @@ class TankController extends GetxController {
|
|||||||
await _authRepository.createTankStop({
|
await _authRepository.createTankStop({
|
||||||
'userId': _dataBox.read('userId'),
|
'userId': _dataBox.read('userId'),
|
||||||
'date': f.format(DateTime.parse(dateController.text)),
|
'date': f.format(DateTime.parse(dateController.text)),
|
||||||
'odometer': double.parse(
|
'odometer': kilometerStandEdittingController.text,
|
||||||
double.parse(
|
'liters': mengeController.text,
|
||||||
kilometerStandEdittingController.text,
|
'pricePerLiter': pricePerLiterController.text,
|
||||||
).toStringAsFixed(0),
|
'location': ortController.text,
|
||||||
),
|
|
||||||
'liters': double.parse(
|
|
||||||
double.parse(mengeController.text).toStringAsFixed(2),
|
|
||||||
),
|
|
||||||
'pricePerLiter': double.parse(
|
|
||||||
double.parse(pricePerLiterController.text).toStringAsFixed(2),
|
|
||||||
),
|
|
||||||
'location': rxOrtString.value,
|
|
||||||
}).then((models.Document document) {
|
}).then((models.Document document) {
|
||||||
print('Tankstopp erfolgreich gespeichert: ${document.data}');
|
print('Tankstopp erfolgreich gespeichert: ${document.data}');
|
||||||
messageToUser = 'Tankstopp erfolgreich gespeichert!';
|
messageToUser = 'Tankstopp erfolgreich gespeichert!';
|
||||||
|
|||||||
@ -181,9 +181,33 @@ class TankPage extends GetView<TankController> {
|
|||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
TextFormField(
|
TextFormField(
|
||||||
|
validator: (value) => controller.validateOrt(value),
|
||||||
focusNode: controller.firstFocusNode, // Setze den FocusNode
|
focusNode: controller.firstFocusNode, // Setze den FocusNode
|
||||||
|
//onTap: () => controller.selectDateTime(Get.context!),
|
||||||
|
controller: controller.ortController,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
labelText: 'Ort der Tankstelle',
|
||||||
|
labelStyle: const TextStyle(color: Colors.white, fontSize: 20),
|
||||||
|
errorStyle: const TextStyle(color: Colors.red, fontSize: 16),
|
||||||
|
filled: true,
|
||||||
|
fillColor: Colors.black.withValues(alpha: 0.9),
|
||||||
|
focusedBorder: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
borderSide: const BorderSide(color: Colors.white, width: 2),
|
||||||
|
),
|
||||||
|
border: OutlineInputBorder(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
borderSide: BorderSide.none, // Entferne den Rand
|
||||||
|
),
|
||||||
|
),
|
||||||
|
style: const TextStyle(color: Colors.white),
|
||||||
|
),
|
||||||
|
SizedBox(height: 20),
|
||||||
|
TextFormField(
|
||||||
|
//focusNode: controller.firstFocusNode, // Setze den FocusNode
|
||||||
readOnly: true,
|
readOnly: true,
|
||||||
onTap: () => controller.selectDateTime(Get.context!),
|
onTap: () => controller.selectDateTime(Get.context!),
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
controller: controller.dateController,
|
controller: controller.dateController,
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
labelText: 'Datum',
|
labelText: 'Datum',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user