From b1712021528e15ea12e067478106c98fe9a3da96 Mon Sep 17 00:00:00 2001
From: vjrj <vjrj@comunes.org>
Date: Wed, 26 Apr 2023 19:52:40 +0200
Subject: [PATCH] Added feedback

---
 lib/main.dart                   | 37 +++++++++--------
 lib/ui/widgets/card_drawer.dart | 28 ++++++++++++-
 pubspec.lock                    | 72 +++++++++++++--------------------
 pubspec.yaml                    |  8 +++-
 4 files changed, 80 insertions(+), 65 deletions(-)

diff --git a/lib/main.dart b/lib/main.dart
index f0c5f8f7..bf0d5c5c 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,8 +1,9 @@
+import 'dart:async';
 import 'dart:io';
 
-import 'package:connectivity_wrapper/connectivity_wrapper.dart';
 import 'package:cron/cron.dart';
 import 'package:easy_localization/easy_localization.dart';
+import 'package:feedback/feedback.dart';
 import 'package:filesystem_picker/filesystem_picker.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
@@ -25,6 +26,7 @@ import 'app_bloc_observer.dart';
 import 'config/theme.dart';
 import 'cubit/bottom_nav_cubit.dart';
 import 'cubit/theme_cubit.dart';
+import 'custom_feedback_localization.dart';
 import 'data/models/app_cubit.dart';
 import 'data/models/app_state.dart';
 import 'data/models/contact_cubit.dart';
@@ -60,9 +62,7 @@ void main() async {
 
   // .env
   await dotenv.load(
-      fileName: kReleaseMode
-          ? 'assets/env.production.txt'
-          : 'assets/.env.development');
+      fileName: kReleaseMode ? 'env.production.txt' : '.env.development');
 
   final SharedPreferencesHelper shared = SharedPreferencesHelper();
   await shared.init();
@@ -97,7 +97,7 @@ void main() async {
 
   void appRunner() => runApp(
         EasyLocalization(
-          path: 'assets/translations',
+          path: 'translations',
           supportedLocales: const <Locale>[
             // Asturian is not supported in flutter
             // More info: https://docs.flutter.dev/development/accessibility-and-localization/internationalization#adding-support-for-a-new-language
@@ -325,14 +325,16 @@ class _GinkgoAppState extends State<GinkgoApp> {
   Widget build(BuildContext context) {
     return BlocBuilder<NodeListCubit, NodeListState>(
         builder: (BuildContext nodeContext, NodeListState state) {
-      return ConnectivityAppWrapper(
-          app: FilesystemPickerDefaultOptions(
-              fileTileSelectMode: FileTileSelectMode.wholeTile,
-              theme: FilesystemPickerTheme(
-                topBar: FilesystemPickerTopBarThemeData(
-                  backgroundColor: Theme.of(context).colorScheme.primary,
-                ),
-              ),
+      return FilesystemPickerDefaultOptions(
+          fileTileSelectMode: FileTileSelectMode.wholeTile,
+          theme: FilesystemPickerTheme(
+            topBar: FilesystemPickerTopBarThemeData(
+              backgroundColor: Theme.of(context).colorScheme.primary,
+            ),
+          ),
+          child: BetterFeedback(
+              localizationsDelegates: context.localizationDelegates
+                ..add(CustomFeedbackLocalizationsDelegate()),
               child: MaterialApp(
                 /// Localization is not available for the title.
                 title: 'Äž1nkgo',
@@ -358,12 +360,9 @@ class _GinkgoAppState extends State<GinkgoApp> {
                   NotificationController.locale = context.locale;
                   return ResponsiveWrapper.builder(
                     BouncingScrollWrapper.builder(
-                        context,
-                        ConnectivityWidgetWrapper(
-                          message: tr('offline'),
-                          height: 20,
-                          child: widget!,
-                        )),
+                      context,
+                      widget!,
+                    ),
                     maxWidth: 480,
                     minWidth: 480,
                     // defaultScale: true,
diff --git a/lib/ui/widgets/card_drawer.dart b/lib/ui/widgets/card_drawer.dart
index 9f604182..a49bb472 100644
--- a/lib/ui/widgets/card_drawer.dart
+++ b/lib/ui/widgets/card_drawer.dart
@@ -1,6 +1,9 @@
 import 'package:easy_localization/easy_localization.dart';
+import 'package:feedback_gitlab/feedback_gitlab.dart';
+import 'package:feedback_sentry/feedback_sentry.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter_dotenv/flutter_dotenv.dart';
 import 'package:package_info_plus/package_info_plus.dart';
 import 'package:sentry_flutter/sentry_flutter.dart';
 
@@ -84,13 +87,36 @@ class CardDrawer extends StatelessWidget {
                       ),
                     ),
                   ),
+                ListTile(
+                  leading: const Icon(Icons.feedback),
+                  title: Text(tr('feedback')),
+                  onTap: () {
+                    Navigator.pop(context);
+                    final String gitLabToken = "${dotenv.env['GITLAB_TOKEN']}";
+                    if (gitLabToken.isNotEmpty) {
+                      BetterFeedback.of(context).showAndUploadToGitLab(
+                          projectId: '663',
+                          apiToken: gitLabToken,
+                          gitlabUrl: 'git.duniter.org');
+                    }
+                    BetterFeedback.of(context).showAndUploadToSentry(
+                      // name: 'Foo Bar',
+                      // email: 'foo_bar@example.com',
+                    );
+                  },
+                ),
                 AboutListTile(
                     icon: g1nkgoIcon,
                     applicationName: tr('app_name'),
                     applicationVersion: 'Version: ${snapshot.data!.version}',
                     applicationIcon: g1nkgoIcon,
                     applicationLegalese:
-                        '© 2023-${DateTime.now().year} Comunes Association, under AGPLv3',
+                    '© ${DateTime
+                        .now()
+                        .year
+                        .toString() == '2023' ? '2023' : '2023-${DateTime
+                        .now()
+                        .year}'} Comunes Association, under AGPLv3',
                     aboutBoxChildren: const <Widget>[
                       SizedBox(height: 10.0),
                     ]),
diff --git a/pubspec.lock b/pubspec.lock
index 8074ff66..c8311f0d 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -233,30 +233,6 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.17.0"
-  connectivity_plus:
-    dependency: transitive
-    description:
-      name: connectivity_plus
-      sha256: d73575bb66216738db892f72ba67dc478bd3b5490fbbcf43644b57645eabc822
-      url: "https://pub.dev"
-    source: hosted
-    version: "3.0.4"
-  connectivity_plus_platform_interface:
-    dependency: transitive
-    description:
-      name: connectivity_plus_platform_interface
-      sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.2.4"
-  connectivity_wrapper:
-    dependency: "direct main"
-    description:
-      name: connectivity_wrapper
-      sha256: f7c3cefecc57ee290e5e49e7fb9e6a09b5839614b5e30bceebddb9d7925d054c
-      url: "https://pub.dev"
-    source: hosted
-    version: "1.1.3"
   convert:
     dependency: transitive
     description:
@@ -321,14 +297,6 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "2.3.0"
-  dbus:
-    dependency: transitive
-    description:
-      name: dbus
-      sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263"
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.7.8"
   dio:
     dependency: transitive
     description:
@@ -348,9 +316,11 @@ packages:
   durt:
     dependency: "direct main"
     description:
-      path: "../durt"
-      relative: true
-    source: path
+      path: "."
+      ref: HEAD
+      resolved-ref: c08320e8336bdcb3e9cdc2ae5e8b418be5cd9e87
+      url: "https://git.duniter.org/vjrj/durt.git"
+    source: git
     version: "0.1.6"
   easy_debounce:
     dependency: "direct main"
@@ -408,6 +378,30 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "0.2.1"
+  feedback:
+    dependency: "direct main"
+    description:
+      name: feedback
+      sha256: a3a18af1d490b1e172cc354f1270760d14d2d0d5bb65e2d3710565de88507f33
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.6.0"
+  feedback_gitlab:
+    dependency: "direct main"
+    description:
+      name: feedback_gitlab
+      sha256: "30619df8c30772d0e62dd893900b451a7b59218411b099c4fbee05447caea82f"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.2.0"
+  feedback_sentry:
+    dependency: "direct main"
+    description:
+      name: feedback_sentry
+      sha256: "41b9a995355bd4bf3342cff8ba4b489680bf86d8d3740f12159de79194c0f3cc"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.4.0"
   ffi:
     dependency: transitive
     description:
@@ -892,14 +886,6 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.0.0"
-  nm:
-    dependency: transitive
-    description:
-      name: nm
-      sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254"
-      url: "https://pub.dev"
-    source: hosted
-    version: "0.5.0"
   normalize:
     dependency: transitive
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 026f4381..096d8965 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -40,11 +40,12 @@ dependencies:
   easy_logger: ^0.0.2
   qr_flutter: ^4.0.0
   introduction_screen: ^3.1.6
-  connectivity_wrapper: ^1.1.1
   responsive_framework: ^0.2.0
   #durt: ^0.1.6
   durt:
-    path: ../durt
+    # path: ../durt
+    git:
+      url: https://git.duniter.org/vjrj/durt.git
   flutter_neumorphic: ^3.2.0
   shared_preferences: ^2.0.18
   another_flushbar: ^1.12.29
@@ -80,6 +81,9 @@ dependencies:
   easy_debounce: ^2.0.3
   tutorial_coach_mark: ^1.2.8
   lehttp_overrides: ^1.0.2
+  feedback: ^2.6.0
+  feedback_sentry: ^2.4.0
+  feedback_gitlab: ^2.2.0
 
 dev_dependencies:
   flutter_test:
-- 
GitLab