mnemo_cards/lib/pages/profile_page.dart
2024-08-07 00:33:11 +03:00

238 lines
9.1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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'),
),
),
],
),
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<bool>(
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),
),
if (SHOW_ADMIN) ...[
const MobileBuySubscriptionWidget(),
Divider(
height: 5,
color: borderGray.withOpacity(0.2),
),
SimpleTile(
title: Text('Посмотреть рекламу'),
onTap: () {
YandexAds.showRewardedAd((r) {
showErrorDialog(
'Вы получили\n${r.amount} ${r.type}');
});
},
),
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<void> clearAndExit() async {
final sp = await SharedPreferences.getInstance();
sp.clear();
exit(0);
}
const ProfilePage();
}