diff --git a/lib/view/pages/more/feedback/feedbackDialog.dart b/lib/view/pages/more/feedback/feedbackDialog.dart index b155fa8..c3b6d15 100644 --- a/lib/view/pages/more/feedback/feedbackDialog.dart +++ b/lib/view/pages/more/feedback/feedbackDialog.dart @@ -48,125 +48,127 @@ class _FeedbackDialogState extends State { appBar: AppBar( title: const Text('Feedback'), ), - body: Column( - mainAxisSize: MainAxisSize.max, - children: [ - const SizedBox(height: 5), - const Text('Feedback, Anregungen, Ideen, Fehler und Verbesserungen', textAlign: TextAlign.center), - const SizedBox(height: 15), - const Text('Bitte gib keine geheimen Daten wie z.B. Passwörter weiter.', textAlign: TextAlign.center, style: TextStyle(fontSize: 11)), - const SizedBox(height: 20), - Padding( - padding: const EdgeInsets.all(10), - child: TextField( - controller: _feedbackInput, - autofocus: true, - decoration: InputDecoration( + body: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.max, + children: [ + const SizedBox(height: 5), + const Text('Feedback, Anregungen, Ideen, Fehler und Verbesserungen', textAlign: TextAlign.center), + const SizedBox(height: 15), + const Text('Bitte gib keine geheimen Daten wie z.B. Passwörter weiter.', textAlign: TextAlign.center, style: TextStyle(fontSize: 11)), + const SizedBox(height: 20), + Padding( + padding: const EdgeInsets.all(10), + child: TextField( + controller: _feedbackInput, + autofocus: true, + decoration: InputDecoration( border: const OutlineInputBorder(), label: const Text('Feedback und Verbesserungen'), errorText: _textFieldEmpty ? 'Bitte gib eine Beschreibung an' : null, - ), - minLines: 4, - maxLines: 7, - onTapOutside: (PointerDownEvent event) => FocusBehaviour.textFieldTapOutside(context), - ), - ), - const SizedBox(height: 10), - if(_image != null) Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - badges.Badge( - badgeContent: const Icon(Icons.close_outlined, size: 17), - badgeStyle: const badges.BadgeStyle( - padding: EdgeInsets.all(2), ), - child: Container( - decoration: BoxDecoration( - borderRadius: const BorderRadius.all(Radius.circular(5)), - border: Border.all( - width: 3, - color: Theme.of(context).primaryColor, + minLines: 4, + maxLines: 7, + onTapOutside: (PointerDownEvent event) => FocusBehaviour.textFieldTapOutside(context), + ), + ), + const SizedBox(height: 10), + if(_image != null) Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + badges.Badge( + badgeContent: const Icon(Icons.close_outlined, size: 17), + badgeStyle: const badges.BadgeStyle( + padding: EdgeInsets.all(2), + ), + child: Container( + decoration: BoxDecoration( + borderRadius: const BorderRadius.all(Radius.circular(5)), + border: Border.all( + width: 3, + color: Theme.of(context).primaryColor, + ), + ), + height: 150, + child: Image( + image: Image.memory(_image!).image, + fit: BoxFit.contain, ), ), - height: 150, - child: Image( - image: Image.memory(_image!).image, - fit: BoxFit.contain, - ), - ), - onTap: () async { - setState(() { - _image = null; - }); - }, - ), - ], - ), - Padding( - padding: const EdgeInsets.all(5), - child: Visibility( - visible: _error != null, - child: Visibility( - visible: Provider.of(context, listen: false).val().devToolsEnabled, - replacement: const Text('Senden fehlgeschlagen, bitte überprüfe die Internetverbindung.', textAlign: TextAlign.center, style: TextStyle(color: Colors.red)), - child: Text('Senden fehlgeschlagen: \n $_error', textAlign: TextAlign.center, style: const TextStyle(color: Colors.red)), - ), - ), - ), - Padding( - padding: const EdgeInsets.only(right: 20, left: 10), - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Visibility( - visible: _image == null, - child: IconButton( - onPressed: () async { - context.loaderOverlay.show(); - var imageData = await (await FilePick.galleryPick())?.readAsBytes(); - if(context.mounted) context.loaderOverlay.hide(); - setState(() { - _image = imageData; - }); - }, - icon: const Icon(Icons.attach_file_outlined), - ), - ), - const Expanded(child: SizedBox.shrink()), - TextButton( - onPressed: () async { - if(_feedbackInput.text.isEmpty){ - setState(() { - _textFieldEmpty = true; - }); - return; - } - context.loaderOverlay.show(); - AddFeedback( - AddFeedbackParams( - user: AccountData().getUserSecret(), - feedback: _feedbackInput.text, - screenshot: _image != null ? base64Encode(_image!) : null, - appVersion: int.parse((await PackageInfo.fromPlatform()).buildNumber), - ) - ).run().then((value) { - Navigator.of(context).pop(); - InfoDialog.show(context, 'Danke für dein Feedback!'); - context.loaderOverlay.hide(); - }).catchError((error, trace) { - setState(() { - _error = error.toString(); - }); - context.loaderOverlay.hide(); + onTap: () async { + setState(() { + _image = null; }); }, - child: const Text('Senden'), + ), + ], + ), + Padding( + padding: const EdgeInsets.all(5), + child: Visibility( + visible: _error != null, + child: Visibility( + visible: Provider.of(context, listen: false).val().devToolsEnabled, + replacement: const Text('Senden fehlgeschlagen, bitte überprüfe die Internetverbindung.', textAlign: TextAlign.center, style: TextStyle(color: Colors.red)), + child: Text('Senden fehlgeschlagen: \n $_error', textAlign: TextAlign.center, style: const TextStyle(color: Colors.red)), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(right: 20, left: 10), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Visibility( + visible: _image == null, + child: IconButton( + onPressed: () async { + context.loaderOverlay.show(); + var imageData = await (await FilePick.galleryPick())?.readAsBytes(); + if(context.mounted) context.loaderOverlay.hide(); + setState(() { + _image = imageData; + }); + }, + icon: const Icon(Icons.attach_file_outlined), + ), + ), + const Expanded(child: SizedBox.shrink()), + TextButton( + onPressed: () async { + if(_feedbackInput.text.isEmpty){ + setState(() { + _textFieldEmpty = true; + }); + return; + } + context.loaderOverlay.show(); + AddFeedback( + AddFeedbackParams( + user: AccountData().getUserSecret(), + feedback: _feedbackInput.text, + screenshot: _image != null ? base64Encode(_image!) : null, + appVersion: int.parse((await PackageInfo.fromPlatform()).buildNumber), + ) + ).run().then((value) { + Navigator.of(context).pop(); + InfoDialog.show(context, 'Danke für dein Feedback!'); + context.loaderOverlay.hide(); + }).catchError((error, trace) { + setState(() { + _error = error.toString(); + }); + context.loaderOverlay.hide(); + }); + }, + child: const Text('Senden'), + ) + ] ) - ] ) - ) - ], + ], + ), ), ); }