Skip to content
Snippets Groups Projects
card_drawer.dart 5.17 KiB
Newer Older
vjrj's avatar
vjrj committed
import 'package:easy_localization/easy_localization.dart';
vjrj's avatar
vjrj committed
import 'package:feedback_gitlab/feedback_gitlab.dart';
vjrj's avatar
vjrj committed
import 'package:flutter/material.dart';
vjrj's avatar
vjrj committed
import 'package:flutter_dotenv/flutter_dotenv.dart';
vjrj's avatar
vjrj committed
import 'package:package_info_plus/package_info_plus.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
vjrj's avatar
vjrj committed

import '../../data/models/cesium_card.dart';
import '../../shared_prefs_helper.dart';
vjrj's avatar
vjrj committed
import '../screens/sandbox.dart';
import '../ui_helpers.dart';
vjrj's avatar
vjrj committed
import 'first_screen/card_stack.dart';
vjrj's avatar
vjrj committed

class CardDrawer extends StatelessWidget {
  const CardDrawer({super.key});

  @override
  Widget build(BuildContext context) {
    final List<CesiumCard> cards = SharedPreferencesHelper().cesiumCards;
vjrj's avatar
vjrj committed

vjrj's avatar
vjrj committed
    return FutureBuilder<PackageInfo>(
      future: PackageInfo.fromPlatform(),
      builder: (BuildContext context, AsyncSnapshot<PackageInfo> snapshot) {
        if (snapshot.hasData) {
          return Drawer(
vjrj's avatar
vjrj committed
            child: ListView(
              // Important: Remove any padding from the ListView.
              padding: EdgeInsets.zero,
vjrj's avatar
vjrj committed
              children: <Widget>[
                DrawerHeader(
                  /* decoration: BoxDecoration(
                    color: Theme.of(context).primaryColor,
                  ), */
                  child: Column(
                    children: <Widget>[
                      GestureDetector(
                          onTap: () => tryCatch(),
                          onLongPress: () => tryCatch(),
                          child: Image.asset(
                            'assets/img/logo.png',
                            fit: BoxFit.scaleDown,
                            height: 80.0,
                          )),
vjrj's avatar
vjrj committed
                      // const SizedBox(height: 20.0),
                      /* Text(tr('app_name'),
                          style: const TextStyle(
                            fontSize: 24.0,
                            color: Colors.white,
                          )), */
                    ],
                  ),
vjrj's avatar
vjrj committed
                ),
                SizedBox(
                  height: (cards.length * 70) + 50,
                  child: const Center(
                    child: CardStack(),
vjrj's avatar
vjrj committed
                  ),
vjrj's avatar
vjrj committed
                if (inDevelopment)
                  ListTile(
                    leading: const Icon(Icons.build),
                    title: const Text('Sandbox'),
                    onTap: () {
                      showDialog(
                        context: context,
                        builder: (BuildContext context) {
                          return const Sandbox();
                        },
                      );
                    },
                  ),
vjrj's avatar
vjrj committed
                ListTile(
                  leading: const Icon(Icons.telegram_outlined),
                  title: Text(tr('telegram_group')),
                  onTap: () async {
vjrj's avatar
vjrj committed
                    final Locale locale = context.locale;
                    if (locale == const Locale('es') ||
                        locale == const Locale('ca') ||
                        locale == const Locale('gl') ||
                        locale == const Locale('eu') ||
                        locale == const Locale('ast')) {
vjrj's avatar
vjrj committed
                      await openUrl('https://t.me/g1nkgoES');
vjrj's avatar
vjrj committed
                    }
                    if (locale == const Locale('fr')) {
                      await openUrl('https://t.me/g1nkgoFR');
vjrj's avatar
vjrj committed
                    } else {
vjrj's avatar
vjrj committed
                      await openUrl('https://t.me/g1nkgoEN');
vjrj's avatar
vjrj committed
                    }
                  },
                ),
vjrj's avatar
vjrj committed
                ListTile(
                  leading: const Icon(Icons.feedback),
                  title: Text(tr('feedback')),
                  onTap: () {
                    Navigator.pop(context);
vjrj's avatar
vjrj committed
                    final String gitLabToken = dotenv.get('GITLAB_TOKEN',
                        fallback: 'FKb9GMueV4-hyDEWjfAf');
                    BetterFeedback.of(context).showAndUploadToGitLab(
                        projectId: '663',
                        apiToken: gitLabToken,
                        gitlabUrl: 'git.duniter.org');
                    /* BetterFeedback.of(context).showAndUploadToSentry(
vjrj's avatar
vjrj committed
                      // name: 'Foo Bar',
                      // email: 'foo_bar@example.com',
vjrj's avatar
vjrj committed
                    ); */
vjrj's avatar
vjrj committed
                  },
                ),
vjrj's avatar
vjrj committed
                AboutListTile(
                    icon: g1nkgoIcon,
                    applicationName: tr('app_name'),
                    applicationVersion: 'Version: ${snapshot.data!.version}',
vjrj's avatar
vjrj committed
                    applicationIcon: g1nkgoIcon,
                    applicationLegalese:
vjrj's avatar
vjrj committed
                        ${DateTime.now().year.toString() == '2023' ? '2023' : '2023-${DateTime.now().year}'} Comunes Association, under AGPLv3',
vjrj's avatar
vjrj committed
                    aboutBoxChildren: const <Widget>[
                      SizedBox(height: 10.0),
                    ]),
              ],
vjrj's avatar
vjrj committed
            ),
vjrj's avatar
vjrj committed
          );
        } else {
          return const Center(child: CircularProgressIndicator());
        }
      },
vjrj's avatar
vjrj committed
    );
  }
}

Future<void> tryCatch() async {
  try {
    throw StateError('Testing sentry with try catch');
  } catch (error, stackTrace) {
    await Sentry.captureException(error, stackTrace: stackTrace);
  }
}