develop-biggerFeedbackWidget #51

Merged
MineTec merged 4 commits from develop-biggerFeedbackWidget into develop 2024-04-02 07:32:53 +00:00
3 changed files with 47 additions and 4 deletions
Showing only changes of commit ea329d8d64 - Show all commits

View File

@ -6,12 +6,14 @@ part 'addFeedbackParams.g.dart';
class AddFeedbackParams {
String user;
String feedback;
String? screenshot;
int appVersion;
AddFeedbackParams({
required this.user,
required this.feedback,
this.screenshot,
required this.appVersion,
});

View File

@ -10,6 +10,7 @@ AddFeedbackParams _$AddFeedbackParamsFromJson(Map<String, dynamic> json) =>
AddFeedbackParams(
user: json['user'] as String,
feedback: json['feedback'] as String,
screenshot: json['screenshot'] as String?,
appVersion: json['appVersion'] as int,
);
@ -17,5 +18,6 @@ Map<String, dynamic> _$AddFeedbackParamsToJson(AddFeedbackParams instance) =>
<String, dynamic>{
'user': instance.user,
'feedback': instance.feedback,
'screenshot': instance.screenshot,
'appVersion': instance.appVersion,
};

View File

@ -1,10 +1,16 @@
import 'dart:convert';
import 'dart:typed_data';
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 '../../../../api/mhsl/server/feedback/addFeedback.dart';
import '../../../../api/mhsl/server/feedback/addFeedbackParams.dart';
import '../../../../model/accountData.dart';
import '../../../../widget/filePick.dart';
import '../../../../widget/infoDialog.dart';
class FeedbackDialog extends StatefulWidget {
@ -15,7 +21,10 @@ class FeedbackDialog extends StatefulWidget {
}
class _FeedbackDialogState extends State<FeedbackDialog> {
final ImagePicker picker = ImagePicker();
final TextEditingController _feedbackInput = TextEditingController();
Uint8List? _image;
String? _error;
@override
@ -39,38 +48,68 @@ class _FeedbackDialogState extends State<FeedbackDialog> {
autofocus: true,
decoration: const InputDecoration(
border: OutlineInputBorder(),
label: Text('Feedback und Verbesserungen')
label: Text('Feedback und Verbesserungen'),
),
// style: TextStyle(),
Pupsi marked this conversation as resolved
Review

?

?
// expands: true,
minLines: 4,
maxLines: 7,
)
),
),
if(_image != null) 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,
),
),
Visibility(
visible: _error != null,
child: Text('Senden fehlgeschlagen: $_error', style: const TextStyle(color: Colors.red)),
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
),
Padding(
padding: const EdgeInsets.only(right: 20),
padding: const EdgeInsets.only(right: 20, left: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
IconButton(
onPressed: () async {
context.loaderOverlay.show();
var imageData = await (await FilePick.galleryPick())?.readAsBytes();
context.loaderOverlay.hide();
setState(() {
_image = imageData;
});
},
icon: const Icon(Icons.attach_file_outlined),
),
const Expanded(child: SizedBox.shrink()),
TextButton(
onPressed: () async {
context.loaderOverlay.show();
AddFeedback(
AddFeedbackParams(
user: AccountData().getUserSecret(),
feedback: _feedbackInput.text,
appVersion: int.parse((await PackageInfo.fromPlatform()).buildNumber)
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'),