Initial commit

This commit is contained in:
Jonas Braus
2024-11-28 15:49:21 +01:00
commit 402ec0b793
21 changed files with 1444 additions and 0 deletions
+104
View File
@@ -0,0 +1,104 @@
import 'package:flutter/material.dart';
import 'package:mensaappbackend/modules/ratingCard.dart';
import 'package:mensaappbackend/providers/pageProvider.dart';
import 'package:provider/provider.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
class PageDashboard extends StatelessWidget {
const PageDashboard({super.key});
Future<List<dynamic>> requestSupaBase7Days() async {
var supabase = Supabase.instance.client;
var result = await supabase.from("ratings_database").select("ratings");
return result;
}
final ratingNames = const {
"page1": {"title": "Essen", "q1": "Geschmack", "q2": "Qualität"},
"page2": {"title": "Service", "q1": "Undefined", "q2": "Undefined"},
"page3": {"title": "Wünsche", "q1": "Undefined", "q2": "Undefined"}
};
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.primary,
title: Text(
"Dashboard - Bewertungen",
style: TextStyle(color: Theme.of(context).colorScheme.onPrimary),
),
centerTitle: false,
actions: [
TextButton.icon(
onPressed: () {
var supabase = Supabase.instance.client;
supabase.auth.signOut();
Provider.of<PageProvider>(context, listen: false)
.setSelectedPage(0);
},
label: Text(
"Logout",
style: TextStyle(color: Theme.of(context).colorScheme.onPrimary),
),
icon: Icon(
Icons.logout,
color: Theme.of(context).colorScheme.onPrimary,
),
)
],
),
body: FutureBuilder(
future: requestSupaBase7Days(),
builder: (context, snapshot) {
var data = snapshot.data;
List<Widget> cards = [];
if (data == null) {
return Center();
}
for (var map in data) {
var ratings = map["ratings"];
for (var key in ratings.keys) {
var rating = ratings[key];
if (rating["q1"] != 0) {
cards.add(RatingCard(
rating1: rating["q1"],
rating2: rating["q2"],
text: rating["t1"],
title: ratingNames[key]!["title"]!,
rating1Title: ratingNames[key]!["q1"]!,
rating2Title: ratingNames[key]!["q2"]!,
));
}
}
}
return SingleChildScrollView(
child: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 20,
),
Text(
"Letze 7 Tage:",
style: TextStyle(fontSize: 25),
),
SizedBox(
height: 20,
),
for (var card in cards) card
],
),
),
);
},
),
);
}
}
+39
View File
@@ -0,0 +1,39 @@
import 'package:flutter/material.dart';
import 'package:flutter_login/flutter_login.dart';
import 'package:mensaappbackend/providers/pageProvider.dart';
import 'package:provider/provider.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
class PageLogin extends StatelessWidget {
const PageLogin({super.key});
@override
Widget build(BuildContext context) {
return FlutterLogin(
title: "Dashboard",
hideForgotPasswordButton: true,
onSubmitAnimationCompleted: () {
Provider.of<PageProvider>(context, listen: false).setSelectedPage(Provider.of<PageProvider>(context, listen: false).selectedPage);
},
onLogin: (p0) async {
var supabase = Supabase.instance.client;
try {
await supabase.auth.signInWithPassword(
email: p0.name,
password: p0.password
);
Provider.of<PageProvider>(context, listen: false).selectedPage = 1;
print("correct login");
} on Exception catch (_) {
Provider.of<PageProvider>(context, listen: false).selectedPage = 2;
print("wrong login!");
}
},
onRecoverPassword: (p0) {},
theme: LoginTheme(
pageColorLight: Theme.of(context).colorScheme.surface,
pageColorDark: Theme.of(context).colorScheme.surface,
),
);
}
}
+31
View File
@@ -0,0 +1,31 @@
import 'package:flutter/material.dart';
import 'package:mensaappbackend/providers/pageProvider.dart';
import 'package:provider/provider.dart';
class WrongLogin extends StatelessWidget {
const WrongLogin({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text("Deine Login-Daten sind leider falsch!", style: TextStyle(fontSize: 25),),
SizedBox(height: 25,),
FilledButton.icon(
onPressed: () {
Provider.of<PageProvider>(context, listen: false).setSelectedPage(0);
},
style: const ButtonStyle(padding: WidgetStatePropertyAll(EdgeInsets.all(20))),
label: const Text("Erneut versuchen...", style: TextStyle(fontSize: 18),),
icon: const Icon(Icons.circle_outlined),
)
],
),
),
);
}
}