From 0770ba49eb0290e64b52b2a0e11bdb80328ada2f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Elias=20M=C3=BCller?= <elias@elias-mueller.com>
Date: Mon, 18 Mar 2024 21:17:37 +0100
Subject: [PATCH] Added subtitles to overhang meta actions

---
 .../getParticipants/getParticipantsResponse.dart    |  3 ++-
 .../talk/getReactions/getReactionsResponse.dart     |  3 ++-
 lib/api/marianumcloud/talk/talkApi.dart             |  2 +-
 lib/api/requestCache.dart                           |  2 +-
 lib/extensions/renderNotNull.dart                   |  5 +++++
 lib/view/pages/overhang.dart                        | 13 ++++++++++++-
 6 files changed, 23 insertions(+), 5 deletions(-)
 create mode 100644 lib/extensions/renderNotNull.dart

diff --git a/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart b/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart
index e6f495c..85b99fb 100644
--- a/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart
+++ b/lib/api/marianumcloud/talk/getParticipants/getParticipantsResponse.dart
@@ -1,6 +1,7 @@
 
 import 'package:json_annotation/json_annotation.dart';
-import 'package:marianum_mobile/api/apiResponse.dart';
+
+import '../../../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 a2c73d6..419389a 100644
--- a/lib/api/marianumcloud/talk/getReactions/getReactionsResponse.dart
+++ b/lib/api/marianumcloud/talk/getReactions/getReactionsResponse.dart
@@ -1,5 +1,6 @@
 import 'package:json_annotation/json_annotation.dart';
-import 'package:marianum_mobile/api/apiResponse.dart';
+
+import '../../../apiResponse.dart';
 
 part 'getReactionsResponse.g.dart';
 
diff --git a/lib/api/marianumcloud/talk/talkApi.dart b/lib/api/marianumcloud/talk/talkApi.dart
index 233232b..12ca1df 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/requestCache.dart b/lib/api/requestCache.dart
index 8e15830..b08c89a 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<T extends ApiResponse?> {
diff --git a/lib/extensions/renderNotNull.dart b/lib/extensions/renderNotNull.dart
new file mode 100644
index 0000000..86d9207
--- /dev/null
+++ b/lib/extensions/renderNotNull.dart
@@ -0,0 +1,5 @@
+extension RenderNotNullExt<T> on T? {
+  R? wrapNullable<R>(R Function(T data) defaultValueCallback) {
+    return this != null ? defaultValueCallback(this as T) : null;
+  }
+}
\ No newline at end of file
diff --git a/lib/view/pages/overhang.dart b/lib/view/pages/overhang.dart
index be3f4e1..0da5293 100644
--- a/lib/view/pages/overhang.dart
+++ b/lib/view/pages/overhang.dart
@@ -1,11 +1,14 @@
 
+import 'dart:io';
+
 import 'package:flutter/material.dart';
 import 'package:in_app_review/in_app_review.dart';
-import 'package:marianum_mobile/widget/infoDialog.dart';
+import 'package:marianum_mobile/extensions/renderNotNull.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/feedbackDialog.dart';
 import 'more/gradeAverages/gradeAverage.dart';
@@ -37,6 +40,7 @@ class Overhang extends StatelessWidget {
           ListTile(
             leading: const Icon(Icons.share_outlined),
             title: const Text("Teile die App"),
+            subtitle: const Text("Mit Freunden und deiner Klasse teilen"),
             trailing: const Icon(Icons.arrow_right),
             onTap: () => showDialog(context: context, builder: (context) => const SelectShareTypeDialog())
           ),
@@ -45,11 +49,18 @@ class Overhang extends StatelessWidget {
             builder: (context, snapshot) {
               if(!snapshot.hasData) return const SizedBox.shrink();
 
+              String? getPlatformStoreName() {
+                if(Platform.isAndroid) return "Play store";
+                if(Platform.isIOS) return "App store";
+                return null;
+              }
+
               return Visibility(
                 visible: snapshot.requireData,
                 child: ListTile(
                   leading: const CenteredLeading(Icon(Icons.star_rate_outlined)),
                   title: const Text("App Bewerten"),
+                  subtitle: getPlatformStoreName().wrapNullable((data) => Text("Im $data")),
                   trailing: const Icon(Icons.arrow_right),
                   onTap: () {
                     InAppReview.instance.openStoreListing(appStoreId: "6458789560").then(