From 97b414412d734c9287f604b6b123d9db2b36abbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 17 Mar 2024 22:49:59 +0100 Subject: [PATCH] Revert "Updated feedback to include screenshot and drawings" This reverts commit 7b3c0b488541c20a76148b91439f5ded6c868777. --- .../getParticipantsResponse.dart | 3 +- .../getReactions/getReactionsResponse.dart | 3 +- lib/api/marianumcloud/talk/talkApi.dart | 2 +- .../server/feedback/addFeedbackParams.dart | 2 - .../server/feedback/addFeedbackParams.g.dart | 2 - lib/api/requestCache.dart | 2 +- lib/main.dart | 36 +++---- .../pages/more/feedback/feedbackDialog.dart | 78 +++++++++++++++ .../pages/more/feedback/feedbackForm.dart | 99 ------------------- .../pages/more/feedback/feedbackSender.dart | 32 ------ lib/view/pages/overhang.dart | 13 ++- lib/view/pages/talk/chatView.dart | 1 + lib/view/pages/talk/components/chatTile.dart | 2 +- lib/view/pages/talk/talkNavigator.dart | 7 +- .../pages/timetable/appointmentDetails.dart | 3 +- lib/widget/loadingSpinner.dart | 11 +-- pubspec.yaml | 1 - 17 files changed, 111 insertions(+), 186 deletions(-) create mode 100644 lib/view/pages/more/feedback/feedbackDialog.dart delete mode 100644 lib/view/pages/more/feedback/feedbackForm.dart delete mode 100644 lib/view/pages/more/feedback/feedbackSender.dart diff --git a/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart b/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart index 85b99fb..e6f495c 100644 --- a/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart +++ b/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart @@ -1,7 +1,6 @@ import 'package:json_annotation/json_annotation.dart'; - -import '../../../apiResponse.dart'; +import 'package:marianum_mobile/api/apiResponse.dart'; part 'getParticipantsResponse.g.dart'; diff --git a/lib/api/marianumcloud/talk/getReactions/getReactionsResponse.dart b/lib/api/marianumcloud/talk/getReactions/getReactionsResponse.dart index 419389a..a2c73d6 100644 --- a/lib/api/marianumcloud/talk/getReactions/getReactionsResponse.dart +++ b/lib/api/marianumcloud/talk/getReactions/getReactionsResponse.dart @@ -1,6 +1,5 @@ import 'package:json_annotation/json_annotation.dart'; - -import '../../../apiResponse.dart'; +import 'package:marianum_mobile/api/apiResponse.dart'; part 'getReactionsResponse.g.dart'; diff --git a/lib/api/marianumcloud/talk/talkApi.dart b/lib/api/marianumcloud/talk/talkApi.dart index 12ca1df..233232b 100644 --- a/lib/api/marianumcloud/talk/talkApi.dart +++ b/lib/api/marianumcloud/talk/talkApi.dart @@ -1,13 +1,13 @@ import 'dart:developer'; import 'package:http/http.dart' as http; +import 'package:marianum_mobile/api/apiResponse.dart'; import '../../../model/accountData.dart'; import '../../../model/endpointData.dart'; import '../../apiError.dart'; import '../../apiParams.dart'; import '../../apiRequest.dart'; -import '../../apiResponse.dart'; enum TalkApiMethod { get, diff --git a/lib/api/mhsl/server/feedback/addFeedbackParams.dart b/lib/api/mhsl/server/feedback/addFeedbackParams.dart index 3ed0c55..4f3e8b0 100644 --- a/lib/api/mhsl/server/feedback/addFeedbackParams.dart +++ b/lib/api/mhsl/server/feedback/addFeedbackParams.dart @@ -6,14 +6,12 @@ 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, }); diff --git a/lib/api/mhsl/server/feedback/addFeedbackParams.g.dart b/lib/api/mhsl/server/feedback/addFeedbackParams.g.dart index f401495..47f2105 100644 --- a/lib/api/mhsl/server/feedback/addFeedbackParams.g.dart +++ b/lib/api/mhsl/server/feedback/addFeedbackParams.g.dart @@ -10,7 +10,6 @@ AddFeedbackParams _$AddFeedbackParamsFromJson(Map json) => AddFeedbackParams( user: json['user'] as String, feedback: json['feedback'] as String, - screenshot: json['screenshot'] as String?, appVersion: json['appVersion'] as int, ); @@ -18,6 +17,5 @@ Map _$AddFeedbackParamsToJson(AddFeedbackParams instance) => { 'user': instance.user, 'feedback': instance.feedback, - 'screenshot': instance.screenshot, 'appVersion': instance.appVersion, }; diff --git a/lib/api/requestCache.dart b/lib/api/requestCache.dart index b08c89a..8e15830 100644 --- a/lib/api/requestCache.dart +++ b/lib/api/requestCache.dart @@ -1,8 +1,8 @@ import 'dart:convert'; import 'package:localstore/localstore.dart'; +import 'package:marianum_mobile/api/apiResponse.dart'; -import 'apiResponse.dart'; import 'webuntis/webuntisError.dart'; abstract class RequestCache { diff --git a/lib/main.dart b/lib/main.dart index be3c864..804de78 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,14 +2,12 @@ import 'dart:async'; import 'dart:developer'; import 'dart:io'; -import 'package:feedback/feedback.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:jiffy/jiffy.dart'; -import 'package:loader_overlay/loader_overlay.dart'; import 'package:provider/provider.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; @@ -30,7 +28,6 @@ import 'storage/base/settingsProvider.dart'; import 'theming/darkAppTheme.dart'; import 'theming/lightAppTheme.dart'; import 'view/login/login.dart'; -import 'view/pages/more/feedback/feedbackForm.dart'; import 'widget/placeholderView.dart'; Future main() async { @@ -71,12 +68,7 @@ Future main() async { ChangeNotifierProvider(create: (context) => MessageProps()), ChangeNotifierProvider(create: (context) => HolidaysProps()), ], - child: BetterFeedback( - themeMode: ThemeMode.dark, - feedbackBuilder: (context, callback, scrollController) => FeedbackForm(callback: callback, scrollController: scrollController), - localeOverride: const Locale('de'), - child: const Main(), - ), + child: const Main(), ) ); } @@ -130,20 +122,18 @@ class _MainState extends State
{ themeMode: settings.val().appTheme, theme: LightAppTheme.theme, darkTheme: DarkAppTheme.theme, - home: LoaderOverlay( - child: Breaker( - breaker: BreakerArea.global, - child: Consumer( - builder: (context, accountModel, child) { - switch(accountModel.state) { - case AccountModelState.loggedIn: return const App(); - case AccountModelState.loggedOut: return const Login(); - case AccountModelState.undefined: return const PlaceholderView(icon: Icons.timer, text: "Daten werden geladen"); - } - }, - ) - ), - ), + home: Breaker( + breaker: BreakerArea.global, + child: Consumer( + builder: (context, accountModel, child) { + switch(accountModel.state) { + case AccountModelState.loggedIn: return const App(); + case AccountModelState.loggedOut: return const Login(); + case AccountModelState.undefined: return const PlaceholderView(icon: Icons.timer, text: "Daten werden geladen"); + } + }, + ) + ) ); }, ), diff --git a/lib/view/pages/more/feedback/feedbackDialog.dart b/lib/view/pages/more/feedback/feedbackDialog.dart new file mode 100644 index 0000000..8be1c81 --- /dev/null +++ b/lib/view/pages/more/feedback/feedbackDialog.dart @@ -0,0 +1,78 @@ + +import 'package:flutter/material.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/infoDialog.dart'; + +class FeedbackDialog extends StatefulWidget { + const FeedbackDialog({super.key}); + + @override + State createState() => _FeedbackDialogState(); +} + +class _FeedbackDialogState extends State { + final TextEditingController _feedbackInput = TextEditingController(); + String? _error; + + @override + Widget build(BuildContext context) { + 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"), + ) + ], + ); + } +} diff --git a/lib/view/pages/more/feedback/feedbackForm.dart b/lib/view/pages/more/feedback/feedbackForm.dart deleted file mode 100644 index 4e94515..0000000 --- a/lib/view/pages/more/feedback/feedbackForm.dart +++ /dev/null @@ -1,99 +0,0 @@ - -import 'package:flutter/material.dart'; - -import '../../../../theming/darkAppTheme.dart'; -import '../../../../widget/loadingSpinner.dart'; - -class FeedbackForm extends StatefulWidget { - final Future Function(String, {Map? extras}) callback; - final ScrollController? scrollController; - const FeedbackForm({required this.scrollController, required this.callback, super.key}); - - @override - State createState() => _FeedbackFormState(); -} - -class _FeedbackFormState extends State { - final TextEditingController _feedbackInput = TextEditingController(); - bool _textFieldEmpty = false; - bool _isSending = false; - - @override - void initState() { - super.initState(); - _feedbackInput.addListener(() { - setState(() { - _textFieldEmpty = _feedbackInput.text.isEmpty; - }); - }); - } - - @override - Widget build(BuildContext context) { - return Theme( - data: DarkAppTheme.theme, - child: Visibility( - visible: !_isSending, - replacement: const LoadingSpinner(infoText: "Daten werden ermittelt"), - child: SingleChildScrollView( - controller: widget.scrollController, - padding: const EdgeInsets.all(20), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - 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: InputDecoration( - border: const OutlineInputBorder(), - label: const Text("Dein Feedback"), - errorText: _textFieldEmpty ? "Bitte gib eine Beschreibung an" : null - ), - minLines: 1, - maxLines: 2, - ), - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - TextButton( - onPressed: () async { - if(_isSending) return; - if(_feedbackInput.text.isEmpty) { - setState(() { - _textFieldEmpty = true; - }); - return; - } - - setState(() { - _isSending = true; - }); - - widget.callback(_feedbackInput.text); - }, - child: const Text("Senden"), - ), - ], - ), - const SizedBox(height: 40), - const Center( - child: Column( - children: [ - Text( - "Feedback, mal süß wie Kuchen, mal sauer wie Gurken, doch immer ein Schlüssel fürs Wachsen und Lernen.", - textAlign: TextAlign.center, - ), - SizedBox(height: 10), - Icon(Icons.emoji_objects_outlined) - ], - ) - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/view/pages/more/feedback/feedbackSender.dart b/lib/view/pages/more/feedback/feedbackSender.dart deleted file mode 100644 index 52b4ada..0000000 --- a/lib/view/pages/more/feedback/feedbackSender.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'dart:convert'; - -import 'package:feedback/feedback.dart'; -import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.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/infoDialog.dart'; - -class FeedbackSender { - static send(BuildContext context, UserFeedback feedback) async { - BetterFeedback.of(context).hide(); - context.loaderOverlay.show(); - AddFeedbackParams params = AddFeedbackParams( - user: AccountData().getUserSecret(), - feedback: feedback.text, - screenshot: await compute((message) => base64Encode(message), feedback.screenshot), - appVersion: int.parse((await PackageInfo.fromPlatform()).buildNumber) - ); - AddFeedback(params).run().then((value) { - InfoDialog.show(context, "Danke für dein Feedback!"); - context.loaderOverlay.hide(); - }).catchError((error, trace) { - InfoDialog.show(context, error.toString()); - context.loaderOverlay.hide(); - }); - } -} \ No newline at end of file diff --git a/lib/view/pages/overhang.dart b/lib/view/pages/overhang.dart index 65e1599..be3f4e1 100644 --- a/lib/view/pages/overhang.dart +++ b/lib/view/pages/overhang.dart @@ -1,12 +1,13 @@ -import 'package:feedback/feedback.dart'; import 'package:flutter/material.dart'; import 'package:in_app_review/in_app_review.dart'; +import 'package:marianum_mobile/widget/infoDialog.dart'; +import 'package:persistent_bottom_nav_bar_v2/persistent-tab-view.dart'; + import '../../widget/ListItem.dart'; import '../../widget/centeredLeading.dart'; -import '../../widget/infoDialog.dart'; import '../settings/settings.dart'; -import 'more/feedback/feedbackSender.dart'; +import 'more/feedback/feedbackDialog.dart'; import 'more/gradeAverages/gradeAverage.dart'; import 'more/holidays/holidays.dart'; import 'more/message/message.dart'; @@ -23,7 +24,7 @@ class Overhang extends StatelessWidget { appBar: AppBar( title: const Text("Mehr"), actions: [ - IconButton(onPressed: () => Navigator.of(context).push(MaterialPageRoute(builder: (context) => const Settings())), icon: const Icon(Icons.settings)) + IconButton(onPressed: () => pushNewScreen(context, screen: const Settings(), withNavBar: false), icon: const Icon(Icons.settings)) ], ), body: ListView( @@ -65,9 +66,7 @@ class Overhang extends StatelessWidget { title: const Text("Du hast eine Idee?"), subtitle: const Text("Fehler und Verbessungsvorschläge"), trailing: const Icon(Icons.arrow_right), - onTap: () { - BetterFeedback.of(context).show((UserFeedback feedback) => FeedbackSender.send(context, feedback)); - }, + onTap: () => showDialog(context: context, barrierDismissible: false, builder: (context) => const FeedbackDialog()), ), ], ), diff --git a/lib/view/pages/talk/chatView.dart b/lib/view/pages/talk/chatView.dart index ab31d7e..33c8fac 100644 --- a/lib/view/pages/talk/chatView.dart +++ b/lib/view/pages/talk/chatView.dart @@ -91,6 +91,7 @@ class _ChatViewState extends State { } return Scaffold( + backgroundColor: const Color(0xffefeae2), appBar: ClickableAppBar( onTap: () { TalkNavigator.pushSplitView(context, ChatInfo(widget.room)); diff --git a/lib/view/pages/talk/components/chatTile.dart b/lib/view/pages/talk/components/chatTile.dart index 5fe0cf5..5dac10b 100644 --- a/lib/view/pages/talk/components/chatTile.dart +++ b/lib/view/pages/talk/components/chatTile.dart @@ -121,7 +121,7 @@ class _ChatTileState extends State { onTap: () async { setCurrentAsRead(); ChatView view = ChatView(room: widget.data, selfId: username, avatar: circleAvatar); - TalkNavigator.pushSplitView(context, view, onSecondaryScreen: true); + TalkNavigator.pushSplitView(context, view, overrideToSingleSubScreen: true); Provider.of(context, listen: false).setQueryToken(widget.data.token); }, onLongPress: () { diff --git a/lib/view/pages/talk/talkNavigator.dart b/lib/view/pages/talk/talkNavigator.dart index ac3c0ff..b52661a 100644 --- a/lib/view/pages/talk/talkNavigator.dart +++ b/lib/view/pages/talk/talkNavigator.dart @@ -1,17 +1,18 @@ import 'package:flutter/material.dart'; import 'package:flutter_split_view/flutter_split_view.dart'; +import 'package:persistent_bottom_nav_bar_v2/persistent-tab-view.dart'; class TalkNavigator { static bool hasSplitViewState(BuildContext context) => context.findAncestorStateOfType() != null; static bool isSecondaryVisible(BuildContext context) => hasSplitViewState(context) && SplitView.of(context).isSecondaryVisible; - static void pushSplitView(BuildContext context, Widget view, {bool onSecondaryScreen = false}) { + static void pushSplitView(BuildContext context, Widget view, {bool overrideToSingleSubScreen = false}) { if(isSecondaryVisible(context)) { SplitViewState splitView = SplitView.of(context); - onSecondaryScreen ? splitView.setSecondary(view) : splitView.push(view); + overrideToSingleSubScreen ? splitView.setSecondary(view) : splitView.push(view); } else { - Navigator.of(context).push(MaterialPageRoute(builder: (context) => view)); + pushNewScreen(context, screen: view, withNavBar: false); } } } \ No newline at end of file diff --git a/lib/view/pages/timetable/appointmentDetails.dart b/lib/view/pages/timetable/appointmentDetails.dart index e25b59a..17475da 100644 --- a/lib/view/pages/timetable/appointmentDetails.dart +++ b/lib/view/pages/timetable/appointmentDetails.dart @@ -5,6 +5,7 @@ import 'package:bottom_sheet/bottom_sheet.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; +import 'package:persistent_bottom_nav_bar_v2/persistent-tab-view.dart'; import 'package:provider/provider.dart'; import 'package:rrule/rrule.dart'; import 'package:syncfusion_flutter_calendar/calendar.dart'; @@ -102,7 +103,7 @@ class AppointmentDetails { trailing: IconButton( icon: const Icon(Icons.house_outlined), onPressed: () { - Navigator.of(context).push(MaterialPageRoute(builder: (context) => const Roomplan())); + pushNewScreen(context, withNavBar: false, screen: const Roomplan()); }, ), ), diff --git a/lib/widget/loadingSpinner.dart b/lib/widget/loadingSpinner.dart index c98e5dc..7561246 100644 --- a/lib/widget/loadingSpinner.dart +++ b/lib/widget/loadingSpinner.dart @@ -4,8 +4,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; class LoadingSpinner extends StatefulWidget { - final String? infoText; - const LoadingSpinner({this.infoText, super.key}); + const LoadingSpinner({super.key}); @override State createState() => _LoadingSpinnerState(); @@ -35,13 +34,7 @@ class _LoadingSpinnerState extends State { Visibility( visible: !textVisible, replacement: const Icon(Icons.sentiment_dissatisfied_outlined), - child: Column( - children: [ - if(widget.infoText != null) Text(widget.infoText!), - const SizedBox(height: 10), - const CircularProgressIndicator() - ], - ), + child: const CircularProgressIndicator(), ), const SizedBox(height: 30), Visibility( diff --git a/pubspec.yaml b/pubspec.yaml index 1be5567..5f4332e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -97,7 +97,6 @@ dependencies: rrule: ^0.2.16 time_range_picker: ^2.2.0 in_app_review: ^2.0.8 - feedback: ^3.0.1 dev_dependencies: flutter_test: