develop-biggerFeedbackWidget #51

Merged
MineTec merged 4 commits from develop-biggerFeedbackWidget into develop 2024-04-02 07:32:53 +00:00
Showing only changes of commit 07b32f1e32 - Show all commits

View File

@ -6,10 +6,13 @@ import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:loader_overlay/loader_overlay.dart';
import 'package:package_info/package_info.dart';
import 'package:provider/provider.dart';
import 'package:badges/badges.dart' as badges;
import '../../../../api/mhsl/server/feedback/addFeedback.dart';
import '../../../../api/mhsl/server/feedback/addFeedbackParams.dart';
import '../../../../model/accountData.dart';
import '../../../../storage/base/settingsProvider.dart';
import '../../../../widget/filePick.dart';
import '../../../../widget/infoDialog.dart';
@ -26,6 +29,18 @@ class _FeedbackDialogState extends State<FeedbackDialog> {
final TextEditingController _feedbackInput = TextEditingController();
Uint8List? _image;
String? _error;
bool _textFieldEmpty = false;
@override
void initState() {
super.initState();
_feedbackInput.addListener(() {
setState(() {
_textFieldEmpty = _feedbackInput.text.isEmpty;
_error = null;
});
});
}
@override
Widget build(BuildContext context) {
@ -46,17 +61,25 @@ class _FeedbackDialogState extends State<FeedbackDialog> {
child: TextField(
controller: _feedbackInput,
autofocus: true,
decoration: const InputDecoration(
border: OutlineInputBorder(),
label: Text('Feedback und Verbesserungen'),
decoration: InputDecoration(
border: const OutlineInputBorder(),
label: const Text('Feedback und Verbesserungen'),
errorText: _textFieldEmpty ? 'Bitte gib eine Beschreibung an' : null,
),
// style: TextStyle(),
// expands: true,
minLines: 4,
maxLines: 7,
),
),
if(_image != null) Container(
const SizedBox(height: 10),
if(_image != null) Row(
mainAxisAlignment: MainAxisAlignment.center,
Pupsi marked this conversation as resolved Outdated

bitte hier nochmal auf das Design achten, du kannst einen offline betrieb im emulator mithilfe des flugmodus in der Benachrichtigungsleiste simulieren

bitte hier nochmal auf das Design achten, du kannst einen offline betrieb im emulator mithilfe des flugmodus in der Benachrichtigungsleiste simulieren
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(
@ -70,16 +93,33 @@ class _FeedbackDialogState extends State<FeedbackDialog> {
fit: BoxFit.contain,
),
),
Visibility(
onTap: () async {
setState(() {
_image = null;
});
},
),
],
),
Padding(
padding: const EdgeInsets.all(5),
child: Visibility(
visible: _error != null,
child: Text('Senden fehlgeschlagen: $_error', style: const TextStyle(color: Colors.red)),
child: Visibility(
visible: Provider.of<SettingsProvider>(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: [
IconButton(
Visibility(
visible: _image == null,
child: IconButton(
onPressed: () async {
context.loaderOverlay.show();
var imageData = await (await FilePick.galleryPick())?.readAsBytes();
Pupsi marked this conversation as resolved Outdated

raus wenn es nicht benötigt wird

raus wenn es nicht benötigt wird
@ -90,9 +130,16 @@ class _FeedbackDialogState extends State<FeedbackDialog> {
},
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(
@ -122,75 +169,5 @@ class _FeedbackDialogState extends State<FeedbackDialog> {
),
);
/*
return Scaffold(
appBar: AppBar(
title: const Text('Raumplan'),
),
body: PhotoView(
imageProvider: Image.asset('assets/img/raumplan.jpg').image,
minScale: 0.5,
maxScale: 2.0,
backgroundDecoration: BoxDecoration(color: Theme.of(context).colorScheme.background),
),
);
*/
/*
return AlertDialog(
title: const Text('Feedback'),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Text('Feedback, Anregungen, Ideen, Fehler und Verbesserungen'),
const SizedBox(height: 10),
const Text('Bitte gib keine geheimen Daten wie z.B. Passwörter weiter.', style: TextStyle(fontSize: 10)),
const SizedBox(height: 10),
TextField(
controller: _feedbackInput,
autofocus: true,
decoration: const InputDecoration(
border: OutlineInputBorder(),
label: Text('Feedback und Verbesserungen')
),
// style: TextStyle(),
// expands: true,
minLines: 3,
maxLines: 5,
),
Visibility(
visible: _error != null,
child: Text('Senden fehlgeschlagen: $_error', style: const TextStyle(color: Colors.red))
)
],
),
actions: [
TextButton(onPressed: () => Navigator.of(context).pop(), child: const Text('Abbrechen')),
TextButton(
onPressed: () async {
AddFeedback(
AddFeedbackParams(
user: AccountData().getUserSecret(),
feedback: _feedbackInput.text,
appVersion: int.parse((await PackageInfo.fromPlatform()).buildNumber)
)
)
.run()
.then((value) {
Navigator.of(context).pop();
InfoDialog.show(context, 'Danke für dein Feedback!');
})
.catchError((error, trace) {
setState(() {
_error = error.toString();
});
});
},
child: const Text('Senden'),
)
],
);
*/
}
}