import 'dart:io'; import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:mnemo_cards/admin/add_plan.dart'; import 'package:mnemo_cards/domain/router/app_router.dart'; import 'package:mnemo_cards/domain/router/app_router.gr.dart'; import 'package:mnemo_cards/features/yandex_ads/yandex_ads.dart'; import 'package:mnemo_cards/flags.dart'; import 'package:mnemo_cards/main.dart'; import 'package:mnemo_cards_frontend_common/mnemo_cards_frontend_common.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:url_launcher/url_launcher.dart'; import '../admin/all_cards.dart'; import '../admin/all_users.dart'; import '../di/locator.dart'; import '../domain/router/dialogs.dart'; import '../features/analytics/analytics.dart'; import '../theme/themes.dart'; import '../widgets/buy_subscription_widget.dart'; import '../widgets/enter_promo_code_widget.dart'; import '../widgets/shared_pref_button.dart'; @RoutePage() class ProfilePage extends StatelessWidget { @override Widget build(BuildContext context) { Analytics.profilePageOpened(locator.userManager.userStateHolder.user); locator.userManager.updateUser(); final theme = Theme.of(context).textTheme; return Scaffold( body: SafeArea( child: Column( children: [ Header( 'Привет!', popText: 'назад', hasPopButton: true, trail: GestureDetector( onTap: () async { await locator.userManager.logout(); final sp = await SharedPreferences.getInstance(); sp.clear(); AppRouter.openAuthOrProfile(); }, child: Row( mainAxisAlignment: MainAxisAlignment.end, mainAxisSize: MainAxisSize.max, children: [ Image.asset( 'icons/exit.png', width: 25.w, color: Theme.of(context).colorScheme.primary, ), ], ), ), ), SizedBox( height: 8.h, ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ if (SHOW_ADMIN) Row( children: [ Expanded( child: MaterialButton( onPressed: () { // showErrorDialog('Технические шоколадки...\n\nПопробуйте позже или обновите приложение до последней версии'); showDialog( context: context, builder: (c) => const AllCards()); }, child: Text('Cards'), ), ), Expanded( child: MaterialButton( onPressed: () { showDialog( context: context, builder: (c) => const AllUsers()); }, child: Text('Users'), ), ), Expanded( child: MaterialButton( onPressed: () { AddPlan().addPlan(context); }, child: Text('Plans'), ), ), ], ), if (SHOW_ADMIN) Row( children: [ Expanded( child: GestureDetector( onTap: () { locator.packManager.clearCache(); }, child: Container( alignment: Alignment.center, margin: EdgeInsets.all(8.0), child: Text('Clear cache'), height: 40.h, ), ), ), Expanded( child: MobileSharedPrefButton( builder: (v, _) => (v ?? false) ? Text('PROD') : Text('TEST'), spKey: 'env', setOnTap: (v) => !(v ?? false), ), ), ], ), Expanded( child: StreamBuilder( stream: locator.userManager.userStateHolder.asStream, builder: (context, snapshot) { final userData = snapshot.data?.userDataDto; return Padding( padding: const EdgeInsets.only( left: 10.0, right: 10.0, bottom: 8.0, ), child: UserStatistics(userData), ); }, ), ), Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0), child: Column( mainAxisSize: MainAxisSize.min, children: [ Divider( height: 5, color: borderGray.withOpacity(0.2), ), const MobileEnterPromoCodeWidget(), Divider( height: 5, color: borderGray.withOpacity(0.2), ), const MobileBuySubscriptionWidget(), Divider( height: 5, color: borderGray.withOpacity(0.2), ), if (SHOW_ADMIN) SimpleTile(title: Text('Посмотреть рекламу'), onTap: () { YandexAds.showRewardedAd((r) { showErrorDialog('Вы получили\n${r.amount} ${r.type}'); }); },), if (SHOW_ADMIN) Divider( height: 5, color: borderGray.withOpacity(0.2), ), SimpleTile.text( text: 'Написать в телеграм', onTap: () => launchUrl( Uri.parse('https://t.me/mnemo_cards_bot'), ), ), Divider( height: 5, color: borderGray.withOpacity(0.2), ), SimpleTile( onTap: () => appRouter.push( PageRouteInfo(SettingsPage.name), ), title: Row( children: [ Image.asset( 'icons/settings.png', width: 16.w, color: Theme.of(context).colorScheme.primary, ), SizedBox(width: 8.w), Expanded(child: Text('Настройки там')), ], ), trail: Image.asset( 'icons/next.png', width: 16.w, color: Theme.of(context).colorScheme.primary, ), ), Divider( height: 5, color: borderGray.withOpacity(0.2), ), SizedBox( height: 10.0.h, ), ], ), ), ], ), ), if (MediaQuery.of(context).viewInsets.bottom < 30.0) const BigBackButton(), ], ), ), ); } Future clearAndExit() async { final sp = await SharedPreferences.getInstance(); sp.clear(); exit(0); } const ProfilePage(); }