From 4a1fc193491409d53761149382890056232f6d6c Mon Sep 17 00:00:00 2001 From: Jonas Braus Date: Thu, 21 Nov 2024 15:26:12 +0100 Subject: [PATCH] Page Essen - Mit Provider --- lib/main.dart | 5 +++ lib/modules/ratingStars.dart | 9 ++-- lib/pages/pageEssen.dart | 73 ++++++++++++++++++++++++++++++-- lib/providers/essenProvider.dart | 22 ++++++++++ 4 files changed, 101 insertions(+), 8 deletions(-) create mode 100644 lib/providers/essenProvider.dart diff --git a/lib/main.dart b/lib/main.dart index ab8ec95..1cd15a3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:google_nav_bar/google_nav_bar.dart'; +import 'package:mensaapp/providers/essenProvider.dart'; import 'package:mensaapp/providers/pageProvider.dart'; import 'package:provider/provider.dart'; @@ -17,9 +18,13 @@ class MyApp extends StatelessWidget { providers: [ ChangeNotifierProvider( create: (context) => PageProvider(), + ), + ChangeNotifierProvider( + create: (context) => EssenProvider(), ) ], child: MaterialApp( + debugShowCheckedModeBanner: false, theme: ThemeData( colorScheme: const ColorScheme( primary: Color.fromRGBO(236, 92, 61, 1), diff --git a/lib/modules/ratingStars.dart b/lib/modules/ratingStars.dart index 146b858..2020a7c 100644 --- a/lib/modules/ratingStars.dart +++ b/lib/modules/ratingStars.dart @@ -2,16 +2,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; 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 double initRating; @override Widget build(BuildContext context) { return RatingBar.builder( - initialRating: 0, + initialRating: initRating, minRating: 1, - itemSize: 80, + itemSize: 60, direction: Axis.horizontal, allowHalfRating: false, itemCount: 5, @@ -23,7 +24,7 @@ class RatingStars extends StatelessWidget { ); }, onRatingUpdate: (rating) { - onRate(); + onRate(rating); }, ); } diff --git a/lib/pages/pageEssen.dart b/lib/pages/pageEssen.dart index 41e2904..3767dcf 100644 --- a/lib/pages/pageEssen.dart +++ b/lib/pages/pageEssen.dart @@ -2,6 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:mensaapp/modules/ratingEmote.dart'; import 'package:mensaapp/modules/ratingStars.dart'; +import 'package:mensaapp/providers/essenProvider.dart'; +import 'package:provider/provider.dart'; class PageEssen extends StatelessWidget { const PageEssen({super.key}); @@ -9,10 +11,73 @@ class PageEssen extends StatelessWidget { @override Widget build(BuildContext context) { return Center( - child: Column( - children: [ - RatingStars(onRate: () {}) - ], + child: Container( + width: 600, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const SizedBox( + height: 50, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text( + "Geschmack*", + style: TextStyle(fontSize: 35), + ), + Consumer( + 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( + builder: (context, essenProvider, child) { + return RatingStars(onRate: (value) { + essenProvider.setRatingQuali(value); + }, initRating: essenProvider.ratingQuali,); + }, + ) + ], + ), + const SizedBox( + height: 50, + ), + Consumer( + 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), + ); + }, + ) + ], + ), ), ); } diff --git a/lib/providers/essenProvider.dart b/lib/providers/essenProvider.dart new file mode 100644 index 0000000..c37a28a --- /dev/null +++ b/lib/providers/essenProvider.dart @@ -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(); + } +} \ No newline at end of file