From 5b346976f2c26335d575541ed692dfc7ce1411e2 Mon Sep 17 00:00:00 2001 From: Jonas Braus Date: Mon, 25 Nov 2024 16:40:48 +0100 Subject: [PATCH 1/3] Fix Image Scaling Issue + on click outside textfield, close keyboard --- devtools_options.yaml | 3 + lib/pages/pageEssen.dart | 237 +++++++++++++------------ lib/pages/pageEssenSelect.dart | 22 +-- lib/pages/pageService.dart | 190 ++++++++++---------- lib/pages/pageSpezielleErnaehrung.dart | 206 +++++++++++---------- lib/providers/pageProvider.dart | 2 - lib/spaces/spaceRate.dart | 13 -- 7 files changed, 348 insertions(+), 325 deletions(-) create mode 100644 devtools_options.yaml diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 0000000..fa0b357 --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: diff --git a/lib/pages/pageEssen.dart b/lib/pages/pageEssen.dart index 01eee91..b9622f5 100644 --- a/lib/pages/pageEssen.dart +++ b/lib/pages/pageEssen.dart @@ -13,126 +13,139 @@ class PageEssen extends StatelessWidget { @override Widget build(BuildContext context) { + final FocusNode _focus = FocusNode(); + return Consumer(builder: (context, languageProvider, child){ - return Scaffold( - body: Stack( - children: [ - // Hintergrundbild - Container( - width: 1600, - height: 750, - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/backgrounds/Essen.jpg"), - fit: BoxFit.cover, // Deckt den gesamten Bildschirm ab - colorFilter: ColorFilter.mode( - Colors.white.withOpacity(0.2), - BlendMode.dstATop, + return GestureDetector( + onTap: () { + _focus.unfocus(); + }, + child: Scaffold( + body: Stack( + children: [ + // Hintergrundbild + Center( + child: Container( + width: MediaQuery.of(context).size.width * 0.8, + height: MediaQuery.of(context).size.height, + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/backgrounds/Essen.jpg"), + fit: BoxFit.cover, // Deckt den gesamten Bildschirm ab + colorFilter: ColorFilter.mode( + Colors.white.withOpacity(0.6), + BlendMode.dstATop, + ), + ), ), ), ), - ), - // Vordergrundinhalte + // Vordergrundinhalte - Center( - child: SingleChildScrollView( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Consumer( - builder: (context, pageProvider, child) { - return Text( - pageProvider.selectedEssenName, - style: const TextStyle(fontSize: 40), - ); - }, - ), - const SizedBox( - height: 30, - ), - Container( - decoration: BoxDecoration( - color: Colors.white.withOpacity(0.8), - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(80), - bottomRight: Radius.circular(80))), - height: 400, - width: 600, - padding: EdgeInsets.symmetric(horizontal: 20), - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - Provider.of(context).languageData[Provider.of(context).language]["pageEssen"]["question1"], - style: TextStyle(fontSize: 35), - ), - Consumer( - builder: (context, essenProvider, child) { - return RatingStars( - onRate: (value) { - essenProvider.setRatingGeschmack(value); - }, - initRating: essenProvider.ratingGeschmack, - ); - }, - ) - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - Provider.of(context).languageData[Provider.of(context).language]["pageEssen"]["question2"], - 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: 4, - decoration: InputDecoration( - labelText: Provider.of(context).languageData[Provider.of(context).language]["textfield"], - labelStyle: const TextStyle(fontSize: 20), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(15), - ), - ), - style: TextStyle(fontSize: 20), - ); - }, - ), - ], + Center( + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Consumer( + builder: (context, pageProvider, child) { + return Text( + pageProvider.selectedEssenName, + style: TextStyle(fontSize: 40, fontWeight: FontWeight.bold), + ); + }, ), - ), - ], + const SizedBox( + height: 30, + ), + Container( + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.9), + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(80), + bottomRight: Radius.circular(80))), + height: 400, + width: 600, + padding: EdgeInsets.symmetric(horizontal: 20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + Provider.of(context).languageData[Provider.of(context).language]["pageEssen"]["question1"], + style: TextStyle(fontSize: 35), + ), + Consumer( + builder: (context, essenProvider, child) { + return RatingStars( + onRate: (value) { + essenProvider.setRatingGeschmack(value); + }, + initRating: essenProvider.ratingGeschmack, + ); + }, + ) + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + Provider.of(context).languageData[Provider.of(context).language]["pageEssen"]["question2"], + 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: 4, + focusNode: _focus, + decoration: InputDecoration( + labelText: Provider.of(context).languageData[Provider.of(context).language]["textfield"], + labelStyle: const TextStyle(fontSize: 20), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(15), + ), + ), + onFieldSubmitted: (value) { + Navigator.pop(context); + }, + style: TextStyle(fontSize: 20), + ); + }, + ), + ], + ), + ), + ], + ), ), ), - ), - ], + ], + ), ), ); }); diff --git a/lib/pages/pageEssenSelect.dart b/lib/pages/pageEssenSelect.dart index 5724190..2351748 100644 --- a/lib/pages/pageEssenSelect.dart +++ b/lib/pages/pageEssenSelect.dart @@ -21,16 +21,18 @@ class PageEssenSelect extends StatelessWidget { return Scaffold( body: Stack( children: [ - Container( - width: 1600, - height: 750, - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/backgrounds/Essen.jpg"), - fit: BoxFit.cover, // Deckt den gesamten Bildschirm ab - colorFilter: ColorFilter.mode( - Colors.white.withOpacity(0.2), - BlendMode.dstATop, + Center( + child: Container( + width: MediaQuery.of(context).size.width * 0.8, + height: MediaQuery.of(context).size.height, + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/backgrounds/Essen.jpg"), + fit: BoxFit.cover, // Deckt den gesamten Bildschirm ab + colorFilter: ColorFilter.mode( + Colors.white.withOpacity(0.6), + BlendMode.dstATop, + ), ), ), ), diff --git a/lib/pages/pageService.dart b/lib/pages/pageService.dart index bf99699..00a951d 100644 --- a/lib/pages/pageService.dart +++ b/lib/pages/pageService.dart @@ -10,103 +10,113 @@ class PageService extends StatelessWidget { @override Widget build(BuildContext context) { + final FocusNode _focus = FocusNode(); + return Consumer(builder: (context, languageProvider, child){ - return Scaffold( - body: Stack( - children: [ - Container( - width: 1600, - height: 750, - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/backgrounds/Service.jpg"), - fit: BoxFit.cover, - colorFilter: ColorFilter.mode( - Colors.white.withOpacity(0.2), - BlendMode.dstATop - ), - ) - ), - ), - Center( - child: SingleChildScrollView( + return GestureDetector( + onTap: () { + _focus.unfocus(); + }, + child: Scaffold( + body: Stack( + children: [ + Center( child: Container( + width: MediaQuery.of(context).size.width * 0.8, + height: MediaQuery.of(context).size.height, decoration: BoxDecoration( - color: Colors.white.withOpacity(0.8), - borderRadius: BorderRadius.only( - topLeft: Radius.circular(80), - bottomRight: Radius.circular(80) + image: DecorationImage( + image: AssetImage("assets/backgrounds/Service.jpg"), + fit: BoxFit.cover, + colorFilter: ColorFilter.mode( + Colors.white.withOpacity(0.6), + BlendMode.dstATop + ), ) ), - width: 600, - height: 400, - padding: EdgeInsets.symmetric(horizontal: 20), - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - Provider.of(context).languageData[Provider.of(context).language]["pageService"]["question1"], - style: TextStyle(fontSize: 35), - ), - Consumer( - builder: (context, essenProvider, child) { - return RatingStars(onRate: (value) { - essenProvider.setRatingFrage1(value); - }, initRating: essenProvider.ratingFrage1,); - }, - ) - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - Provider.of(context).languageData[Provider.of(context).language]["pageService"]["question2"], - style: TextStyle(fontSize: 35), - ), - Consumer( - builder: (context, essenProvider, child) { - return RatingStars(onRate: (value) { - essenProvider.setRatingFrage2(value); - }, initRating: essenProvider.ratingFrage2,); - }, - ) - ], - ), - const SizedBox( - height: 50, - ), - Consumer( - builder: (context, essenProvider, child) { - return TextFormField( - initialValue: essenProvider.freiText, - onChanged: (value) { - essenProvider.setFreiText(value); - }, - autofocus: false, - maxLength: 500, - maxLines: 4, - decoration: InputDecoration( - labelText: Provider.of(context).languageData[Provider.of(context).language]["textfield"], - labelStyle: const TextStyle(fontSize: 20), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(15) - ), - ), - style: TextStyle(fontSize: 20), - ); - }, - ) - ], - ), ), ), - ) - ], + Center( + child: SingleChildScrollView( + child: Container( + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.9), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(80), + bottomRight: Radius.circular(80) + ) + ), + width: 600, + height: 400, + padding: EdgeInsets.symmetric(horizontal: 20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + Provider.of(context).languageData[Provider.of(context).language]["pageService"]["question1"], + style: TextStyle(fontSize: 35), + ), + Consumer( + builder: (context, essenProvider, child) { + return RatingStars(onRate: (value) { + essenProvider.setRatingFrage1(value); + }, initRating: essenProvider.ratingFrage1,); + }, + ) + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + Provider.of(context).languageData[Provider.of(context).language]["pageService"]["question2"], + style: TextStyle(fontSize: 35), + ), + Consumer( + builder: (context, essenProvider, child) { + return RatingStars(onRate: (value) { + essenProvider.setRatingFrage2(value); + }, initRating: essenProvider.ratingFrage2,); + }, + ) + ], + ), + const SizedBox( + height: 50, + ), + Consumer( + builder: (context, essenProvider, child) { + return TextFormField( + initialValue: essenProvider.freiText, + onChanged: (value) { + essenProvider.setFreiText(value); + }, + autofocus: false, + maxLength: 500, + maxLines: 4, + focusNode: _focus, + decoration: InputDecoration( + labelText: Provider.of(context).languageData[Provider.of(context).language]["textfield"], + labelStyle: const TextStyle(fontSize: 20), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(15) + ), + ), + style: TextStyle(fontSize: 20), + ); + }, + ) + ], + ), + ), + ), + ) + ], + ), ), ); }); diff --git a/lib/pages/pageSpezielleErnaehrung.dart b/lib/pages/pageSpezielleErnaehrung.dart index d129bd8..3165927 100644 --- a/lib/pages/pageSpezielleErnaehrung.dart +++ b/lib/pages/pageSpezielleErnaehrung.dart @@ -12,109 +12,119 @@ class PageSpezielleErnaehrung extends StatelessWidget { @override Widget build(BuildContext context) { + final FocusNode _focus = FocusNode(); + return Consumer(builder: (context, languageProvider, child) { - return Scaffold( - body: Stack( - children: [ - Container( - width: 1600, - height: 750, - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/backgrounds/Speziell.jpg"), - fit: BoxFit.cover, - colorFilter: ColorFilter.mode( - Colors.white.withOpacity(0.2), BlendMode.dstATop), - )), - ), - Center( - child: SingleChildScrollView( + return GestureDetector( + onTap: () { + _focus.unfocus(); + }, + child: Scaffold( + body: Stack( + children: [ + Center( child: Container( + width: MediaQuery.of(context).size.width * 0.8, + height: MediaQuery.of(context).size.height, decoration: BoxDecoration( - color: Colors.white.withOpacity(0.8), - borderRadius: BorderRadius.only( - topLeft: Radius.circular(80), - bottomRight: Radius.circular(80))), - width: 650, - height: 450, - padding: EdgeInsets.symmetric(horizontal: 20), - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - Provider.of(context).languageData[Provider.of(context).language]["pageSpecial"]["question1"], - style: TextStyle(fontSize: 35), - ), - Consumer( - builder: - (context, spezielleErnaehrungProvider, child) { - return RatingStars( - onRate: (value) { - spezielleErnaehrungProvider - .setRatingSitzmoeglichkeit(value); - }, - initRating: spezielleErnaehrungProvider - .ratingSitzmoeglichkeit, - ); - }, - ) - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - Provider.of(context).languageData[Provider.of(context).language]["pageSpecial"]["question2"], - style: TextStyle(fontSize: 35), - ), - Consumer( - builder: - (context, spezielleErnaehrungProvider, child) { - return RatingStars( - onRate: (value) { - spezielleErnaehrungProvider - .setRatingKeineAhnung(value); - }, - initRating: - spezielleErnaehrungProvider.ratingKeineAhnung, - ); - }, - ), - ], - ), - const SizedBox( - height: 50, - ), - Consumer( - builder: (context, spezielleErnaehrungProvider, child) { - return TextFormField( - initialValue: spezielleErnaehrungProvider.freiText, - onChanged: (value) { - spezielleErnaehrungProvider.setFreiText(value); - }, - autofocus: false, - maxLength: 500, - maxLines: 5, - decoration: InputDecoration( - labelText: Provider.of(context).languageData[Provider.of(context).language]["textfield"], - labelStyle: const TextStyle(fontSize: 20), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(15)), - ), - style: TextStyle(fontSize: 20), - ); - }, - ) - ], - ), + image: DecorationImage( + image: AssetImage("assets/backgrounds/Anmerkungen.jpg"), + fit: BoxFit.cover, + colorFilter: ColorFilter.mode( + Colors.white.withOpacity(0.6), BlendMode.dstATop), + )), ), ), - ) - ], + Center( + child: SingleChildScrollView( + child: Container( + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.9), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(80), + bottomRight: Radius.circular(80))), + width: 650, + height: 450, + padding: EdgeInsets.symmetric(horizontal: 20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + Provider.of(context).languageData[Provider.of(context).language]["pageSpecial"]["question1"], + style: TextStyle(fontSize: 35), + ), + Consumer( + builder: + (context, spezielleErnaehrungProvider, child) { + return RatingStars( + onRate: (value) { + spezielleErnaehrungProvider + .setRatingSitzmoeglichkeit(value); + }, + initRating: spezielleErnaehrungProvider + .ratingSitzmoeglichkeit, + ); + }, + ) + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + Provider.of(context).languageData[Provider.of(context).language]["pageSpecial"]["question2"], + style: TextStyle(fontSize: 35), + ), + Consumer( + builder: + (context, spezielleErnaehrungProvider, child) { + return RatingStars( + onRate: (value) { + spezielleErnaehrungProvider + .setRatingKeineAhnung(value); + }, + initRating: + spezielleErnaehrungProvider.ratingKeineAhnung, + ); + }, + ), + ], + ), + const SizedBox( + height: 50, + ), + Consumer( + builder: (context, spezielleErnaehrungProvider, child) { + return TextFormField( + initialValue: spezielleErnaehrungProvider.freiText, + onChanged: (value) { + spezielleErnaehrungProvider.setFreiText(value); + }, + autofocus: false, + maxLength: 500, + maxLines: 5, + focusNode: _focus, + decoration: InputDecoration( + labelText: Provider.of(context).languageData[Provider.of(context).language]["textfield"], + labelStyle: const TextStyle(fontSize: 20), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(15)), + ), + style: TextStyle(fontSize: 20), + ); + }, + ) + ], + ), + ), + ), + ) + ], + ), ), ); }); diff --git a/lib/providers/pageProvider.dart b/lib/providers/pageProvider.dart index 8713d75..806d7c5 100644 --- a/lib/providers/pageProvider.dart +++ b/lib/providers/pageProvider.dart @@ -12,9 +12,7 @@ class PageProvider extends ChangeNotifier { String selectedEssenName = ""; List pages = [ const PageEssenSelect(), - const PageAmbiente(), const PageService(), - const PageAnmerkungen(), const PageSpezielleErnaehrung() ]; diff --git a/lib/spaces/spaceRate.dart b/lib/spaces/spaceRate.dart index 25518bb..bb30968 100644 --- a/lib/spaces/spaceRate.dart +++ b/lib/spaces/spaceRate.dart @@ -246,25 +246,12 @@ class SpaceRate extends StatelessWidget { Provider.of(context).language] ["navBar"]["0"], ), - GButton( - icon: Icons.chair, - /* prev: landscape*/ - text: Provider.of(context).languageData[ - Provider.of(context).language] - ["navBar"]["1"], - ), GButton( icon: Icons.mood, text: Provider.of(context).languageData[ Provider.of(context).language] ["navBar"]["2"], ), - GButton( - icon: Icons.feedback, - text: Provider.of(context).languageData[ - Provider.of(context).language] - ["navBar"]["3"], - ), GButton( icon: Icons.grass, text: Provider.of(context).languageData[ From 122c9e7ba8087fd3ba78deaf1d270f3d5d844e46 Mon Sep 17 00:00:00 2001 From: Jonas Braus Date: Mon, 25 Nov 2024 16:43:19 +0100 Subject: [PATCH 2/3] Better Home Icon --- lib/spaces/spaceRate.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/spaces/spaceRate.dart b/lib/spaces/spaceRate.dart index bb30968..d8813cc 100644 --- a/lib/spaces/spaceRate.dart +++ b/lib/spaces/spaceRate.dart @@ -84,7 +84,7 @@ class SpaceRate extends StatelessWidget { appBar: AppBar( leading: IconButton( icon: Icon( - Icons.home, + Icons.home_rounded, size: 36, color: Theme.of(context).colorScheme.onPrimary, ), From cba4a82d67f24615adcb6fa9c9aabf8630a4467d Mon Sep 17 00:00:00 2001 From: Jonas Braus Date: Mon, 25 Nov 2024 16:46:58 +0100 Subject: [PATCH 3/3] Fix Language in Title --- lib/providers/languageProvider.dart | 18 ++++++------------ lib/spaces/spaceRate.dart | 4 ++-- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/lib/providers/languageProvider.dart b/lib/providers/languageProvider.dart index 2b81e43..6c92936 100644 --- a/lib/providers/languageProvider.dart +++ b/lib/providers/languageProvider.dart @@ -39,10 +39,8 @@ class LanguageProvider extends ChangeNotifier { "navBar": { "0": "Essen", - "1": "Ambiente", - "2": "Service", - "3": "Anmerkungen", - "4": "Spezielle Ernährung" + "1": "Service", + "2": "Spezielle Ernährung" }, "floating": { @@ -85,10 +83,8 @@ class LanguageProvider extends ChangeNotifier { }, "navBar": { "0": "Food", - "1": "Ambience", - "2": "Service", - "3": "Remarks", - "4": "Special Diet" + "1": "Service", + "2": "Special Diet" }, "floating": { "info": "* Required field", @@ -130,10 +126,8 @@ class LanguageProvider extends ChangeNotifier { }, "navBar": { "0": "Nourriture", - "1": "Ambiance", - "2": "Service", - "3": "Remarques", - "4": "Régime spécial" + "1": "Service", + "2": "Régime spécial" }, "floating": { "info": "* Champ obligatoire", diff --git a/lib/spaces/spaceRate.dart b/lib/spaces/spaceRate.dart index d8813cc..2140b09 100644 --- a/lib/spaces/spaceRate.dart +++ b/lib/spaces/spaceRate.dart @@ -250,13 +250,13 @@ class SpaceRate extends StatelessWidget { icon: Icons.mood, text: Provider.of(context).languageData[ Provider.of(context).language] - ["navBar"]["2"], + ["navBar"]["1"], ), GButton( icon: Icons.grass, text: Provider.of(context).languageData[ Provider.of(context).language] - ["navBar"]["4"], + ["navBar"]["2"], ), ], ),