add notification, fix appbar,fix style subscription

This commit is contained in:
2026-05-21 12:19:06 +03:00
parent e7d2154d98
commit c996d0847f
60 changed files with 774 additions and 365 deletions

View File

@@ -2,7 +2,9 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart';
import '../../core/app_colors.dart';
import '../components/app_checkbox.dart';
import '../components/custom_app_bar.dart'; // ✅ Добавь импорт
import '../components/gradient_button.dart';
import '../components/period_selector.dart';
import '../event/subscription_details_event.dart';
@@ -17,66 +19,74 @@ class SubscriptionDetailsScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFF1A2355),
appBar: AppBar(
backgroundColor: Colors.transparent,
elevation: 0,
leading: IconButton(
icon: const Icon(Icons.arrow_back_ios, color: Colors.white),
onPressed: () => context.pop(),
),
title: BlocBuilder<SubscriptionDetailsBloc, SubscriptionDetailsState>(
builder: (context, state) {
if (state is DetailsContentState) {
return Text(state.subscription.title);
}
return const Text("Загрузка...");
},
body: Container(
decoration: const BoxDecoration(gradient: AppColors.phoneScreenBg),
child: SafeArea(
child: Column(
children: [
const SizedBox(height: 16),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
child: BlocBuilder<SubscriptionDetailsBloc, SubscriptionDetailsState>(
builder: (context, state) {
String title = "Загрузка...";
if (state is DetailsContentState) {
title = state.subscription.title;
}
return CustomAppBar(title: title);
},
),
),
const SizedBox(height: 20),
// 🔹 Контент
Expanded(
child: Stack(
children: [
// Волна снизу
Positioned(
bottom: 0,
left: 0,
right: 0,
child: Opacity(
opacity: 0.5,
child: Image.asset('assets/wave.png'),
),
),
BlocBuilder<SubscriptionDetailsBloc, SubscriptionDetailsState>(
builder: (context, state) {
if (state is DetailsLoading) {
return const Center(
child: CircularProgressIndicator(color: Color(0xFF80FFD1)),
);
}
if (state is DetailsError) {
return Center(
child: Text(
state.message,
style: const TextStyle(color: Colors.white),
),
);
}
if (state is DetailsContentState) {
return _buildContent(context, state);
}
return const SizedBox();
},
),
],
),
),
],
),
),
),
body: Stack(
children: [
Positioned(
bottom: 0,
left: 0,
right: 0,
child: Opacity(
opacity: 0.5,
child: Image.asset('assets/wave.png'),
),
),
BlocBuilder<SubscriptionDetailsBloc, SubscriptionDetailsState>(
builder: (context, state) {
if (state is DetailsLoading) {
return const Center(
child: CircularProgressIndicator(color: Color(0xFF80FFD1)),
);
}
if (state is DetailsError) {
return Center(
child: Text(
state.message,
style: const TextStyle(color: Colors.white),
),
);
}
if (state is DetailsContentState) {
return _buildContent(context, state);
}
return const SizedBox();
},
),
],
)
);
}
Widget _buildContent(BuildContext context, DetailsContentState state) {
return SingleChildScrollView(
padding: const EdgeInsets.all(20.0),
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -104,6 +114,7 @@ class SubscriptionDetailsScreen extends StatelessWidget {
fontSize: 16,
showArrows: true,
),
const SizedBox(height: 20),
],
),
);
@@ -125,9 +136,6 @@ class _ActionCard extends StatelessWidget {
state.selectedPeriod,
);
context.read<SubscriptionDetailsBloc>().add(
SelectPeriodEvent(state.subscription.options[selectedIndex]));
return Container(
padding: const EdgeInsets.all(24),
decoration: BoxDecoration(
@@ -205,7 +213,7 @@ class _PriceRow extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset("assets/icons/money_icon.png", width: 72, height: 72),
SizedBox(width: 15),
const SizedBox(width: 15),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -224,5 +232,4 @@ class _PriceRow extends StatelessWidget {
),
);
}
}
}