PIN PUUUUUSH

Zhe Pin lautet:
091142069 (very common pin, dont ask why)
This commit is contained in:
Ali
2025-01-24 15:18:13 +01:00
parent 3fe6ac8433
commit bbb9f8ef51
5 changed files with 149 additions and 18 deletions
+131 -6
View File
@@ -3,7 +3,7 @@ import 'package:google_nav_bar/google_nav_bar.dart';
import 'package:mensaapp/modules/databaseService.dart';
import 'package:mensaapp/providers/spaceProvider.dart';
import 'package:provider/provider.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import '../providers/ambienteProvider.dart';
import '../providers/anmerkungProvider.dart';
import '../providers/essenProvider.dart';
@@ -11,6 +11,9 @@ import '../providers/languageProvider.dart';
import '../providers/pageProvider.dart';
import '../providers/serviceProvider.dart';
import '../providers/spezielleErnaehrungProvider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:restart_app/restart_app.dart';
class SpaceRate extends StatelessWidget {
const SpaceRate({super.key});
@@ -80,20 +83,142 @@ class SpaceRate extends StatelessWidget {
);
}
void change_backend_ip(BuildContext context) {
final TextEditingController _ipController = TextEditingController();
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
title: Text("Backend-IP ändern"),
content: TextField(
controller: _ipController,
keyboardType: TextInputType.numberWithOptions(decimal: true), // IP-Format unterstützen
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Neue Backend-IP (z. B. 192.168.1.1)',
),
),
actions: [
ElevatedButton(
onPressed: () async {
final newIp = _ipController.text;
if (newIp.isEmpty) {
// Falls das Feld leer ist, gib eine Warnung aus
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Die IP-Adresse darf nicht leer sein!")),
);
return;
}
// Speichere die neue IP in den Shared Preferences
final prefs = await SharedPreferences.getInstance();
await prefs.setString('supabase-ip', newIp);
// Hole die neue IP und initialisiere die Supabase-Verbindung neu
Restart.restartApp();
},
style: ElevatedButton.styleFrom(
backgroundColor: Theme.of(context).colorScheme.secondary,
),
child: Text("IP Ändern"),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop(); // Dialog schließen
},
style: ElevatedButton.styleFrom(
backgroundColor: Theme.of(context).colorScheme.secondary,
),
child: Text("Abbrechen"),
),
],
);
},
);
}
void enter_pin(BuildContext context) {
showDialog(
context: context,
builder: (BuildContext context) {
final TextEditingController _pinController = TextEditingController();
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
content: TextField(
controller: _pinController,
obscureText: true, // PIN als Passwort maskieren
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'PIN',
counterText: '', // Entfernt die Zeichenanzahl-Anzeige
),
),
actions: [
ElevatedButton(
onPressed: () {
if (_pinController.text == '091142069') {
// Wenn die PIN korrekt ist
Navigator.of(context).pop(); // Dialog schließen
change_backend_ip(context); // Aktion ausführen
} else {
// Wenn die PIN falsch ist, Fehler anzeigen
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text("Falsche PIN!"),
backgroundColor: Colors.red,
),
);
}
},
style: ElevatedButton.styleFrom(
backgroundColor: Theme.of(context).colorScheme.secondary,
),
child: Text("Absenden"),
),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop(); // Schließt den Dialog
},
style: ElevatedButton.styleFrom(
backgroundColor: Theme.of(context).colorScheme.secondary,
),
child: Text("Schließen"),
),
],
);
},
);
}
@override
Widget build(BuildContext context) {
return Consumer<LanguageProvider>(builder: (context, languageProvider, x) {
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(
leading: GestureDetector(
onTap: () {
_showDeleteDialog(context); // Kurzer Klick
},
onLongPress: () async {
await Future.delayed(Duration(seconds: 5));
enter_pin(context); // Langer Klick
},
child: Icon(
Icons.home_rounded,
size: 36,
color: Theme.of(context).colorScheme.onPrimary,
),
onPressed: () {
_showDeleteDialog(context);
},
),
title: Consumer<PageProvider>(
// Consumer verwenden, um den dynamischen Titel anzuzeigen