Page Essen - Mit Provider

This commit is contained in:
Jonas Braus
2024-11-21 15:26:12 +01:00
parent be341b7c69
commit 4a1fc19349
4 changed files with 101 additions and 8 deletions
+5
View File
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:google_nav_bar/google_nav_bar.dart'; import 'package:google_nav_bar/google_nav_bar.dart';
import 'package:mensaapp/providers/essenProvider.dart';
import 'package:mensaapp/providers/pageProvider.dart'; import 'package:mensaapp/providers/pageProvider.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@@ -17,9 +18,13 @@ class MyApp extends StatelessWidget {
providers: [ providers: [
ChangeNotifierProvider( ChangeNotifierProvider(
create: (context) => PageProvider(), create: (context) => PageProvider(),
),
ChangeNotifierProvider(
create: (context) => EssenProvider(),
) )
], ],
child: MaterialApp( child: MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData( theme: ThemeData(
colorScheme: const ColorScheme( colorScheme: const ColorScheme(
primary: Color.fromRGBO(236, 92, 61, 1), primary: Color.fromRGBO(236, 92, 61, 1),
+5 -4
View File
@@ -2,16 +2,17 @@ import 'package:flutter/material.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart';
class RatingStars extends StatelessWidget { class RatingStars extends StatelessWidget {
const RatingStars({super.key, required this.onRate}); const RatingStars({super.key, required this.onRate, required this.initRating});
final Function onRate; final Function onRate;
final double initRating;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return RatingBar.builder( return RatingBar.builder(
initialRating: 0, initialRating: initRating,
minRating: 1, minRating: 1,
itemSize: 80, itemSize: 60,
direction: Axis.horizontal, direction: Axis.horizontal,
allowHalfRating: false, allowHalfRating: false,
itemCount: 5, itemCount: 5,
@@ -23,7 +24,7 @@ class RatingStars extends StatelessWidget {
); );
}, },
onRatingUpdate: (rating) { onRatingUpdate: (rating) {
onRate(); onRate(rating);
}, },
); );
} }
+66 -1
View File
@@ -2,6 +2,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:mensaapp/modules/ratingEmote.dart'; import 'package:mensaapp/modules/ratingEmote.dart';
import 'package:mensaapp/modules/ratingStars.dart'; import 'package:mensaapp/modules/ratingStars.dart';
import 'package:mensaapp/providers/essenProvider.dart';
import 'package:provider/provider.dart';
class PageEssen extends StatelessWidget { class PageEssen extends StatelessWidget {
const PageEssen({super.key}); const PageEssen({super.key});
@@ -9,11 +11,74 @@ class PageEssen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Center( return Center(
child: Container(
width: 600,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
RatingStars(onRate: () {}) const SizedBox(
height: 50,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
"Geschmack*",
style: TextStyle(fontSize: 35),
),
Consumer<EssenProvider>(
builder: (context, essenProvider, child) {
return RatingStars(onRate: (value) {
essenProvider.setRatingGeschmack(value);
}, initRating: essenProvider.ratingGeschmack,);
},
)
], ],
), ),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
"Qualität*",
style: TextStyle(fontSize: 35),
),
Consumer<EssenProvider>(
builder: (context, essenProvider, child) {
return RatingStars(onRate: (value) {
essenProvider.setRatingQuali(value);
}, initRating: essenProvider.ratingQuali,);
},
)
],
),
const SizedBox(
height: 50,
),
Consumer<EssenProvider>(
builder: (context, essenProvider, child) {
return TextFormField(
initialValue: essenProvider.freiText,
onChanged: (value) {
essenProvider.setFreiText(value);
},
autofocus: false,
maxLength: 500,
maxLines: 5,
decoration: InputDecoration(
labelText: "Dein Feedback (optional)",
labelStyle: const TextStyle(fontSize: 20),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(15)
),
),
style: TextStyle(fontSize: 20),
);
},
)
],
),
),
); );
} }
} }
+22
View File
@@ -0,0 +1,22 @@
import 'package:flutter/material.dart';
class EssenProvider extends ChangeNotifier {
double ratingGeschmack = 0;
double ratingQuali = 0;
String freiText = "";
void setRatingGeschmack(double rating) {
ratingGeschmack = rating;
notifyListeners();
}
void setRatingQuali(double rating) {
ratingQuali = rating;
notifyListeners();
}
void setFreiText(String text) {
freiText = text;
notifyListeners();
}
}