From 6cb9e82e61abcacf1c44f8c4d6fd706ee0be4e26 Mon Sep 17 00:00:00 2001 From: Vitalij Date: Mon, 8 Sep 2025 21:13:16 +0300 Subject: [PATCH] =?UTF-8?q?feature(collection):=20=D0=9F=D0=BE=D0=B4=D1=81?= =?UTF-8?q?=D1=87=D0=B5=D1=82=20=D0=BA=D0=BE=D0=BB-=D0=B2=D0=B0=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=B5=D0=BA=20=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/database/dao/tickets_dao.dart | 14 ++++++++ .../collections/widgets/collection_card.dart | 22 ++++++++++--- lib/screens/create_card/create_screen.dart | 32 +++++++++++-------- 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/lib/database/dao/tickets_dao.dart b/lib/database/dao/tickets_dao.dart index 5538b0d..d5499a1 100644 --- a/lib/database/dao/tickets_dao.dart +++ b/lib/database/dao/tickets_dao.dart @@ -27,6 +27,20 @@ class TicketsDao extends DatabaseAccessor with _$TicketsDaoMixin { } } + /// Получение билетов из базы данных + Future getTicketsInCollectionCount(String collectionId) async { + try { + return (await db.managers.tickets + .filter((f) => f.collectionId.id(collectionId)) + .get()) + .length; + } catch (e, st) { + logger.logError('Ошибка в методе getTicketsInCollectionCount', e, st); + + throw ('EXEPTION'); + } + } + /// Удаление билета Future removeTicket(String id) async { try { diff --git a/lib/screens/collections/widgets/collection_card.dart b/lib/screens/collections/widgets/collection_card.dart index 73c87fe..ac2c5e9 100644 --- a/lib/screens/collections/widgets/collection_card.dart +++ b/lib/screens/collections/widgets/collection_card.dart @@ -12,6 +12,7 @@ import 'package:remever/common/widgets/wspace.dart'; import 'package:remever/components/extensions/context.dart'; import 'package:remever/database/database.dart'; import 'package:remever/gen/assets.gen.dart'; +import 'package:remever/inject.dart'; import 'package:remever/router.gr.dart'; import 'package:remever/screens/collections/widgets/collection_progress_bar.dart'; import 'package:remever/screens/dialogs/action_dialog.dart'; @@ -130,10 +131,23 @@ class CollectionCard extends StatelessWidget { Widget _buildLikeAndCardsLength() { return Row( children: [ - _buildIconWithText( - icon: Assets.icons.typeCards, - color: AppColors.disabled, - text: collection.likesCount.toString(), + FutureBuilder( + future: getIt().ticketsDao.getTicketsInCollectionCount( + collection.id, + ), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) + return SizedBox.square( + dimension: 18.r, + child: CircularProgressIndicator(), + ); + + return _buildIconWithText( + icon: Assets.icons.typeCards, + color: AppColors.disabled, + text: snapshot.data.toString(), + ); + }, ), const WSpace(8), _buildIconWithText( diff --git a/lib/screens/create_card/create_screen.dart b/lib/screens/create_card/create_screen.dart index e7e9295..a8155a5 100644 --- a/lib/screens/create_card/create_screen.dart +++ b/lib/screens/create_card/create_screen.dart @@ -36,6 +36,7 @@ class CreateScreen extends StatefulWidget { class _CreateScreenState extends State { CreateTicketDto _dto = CreateTicketDto(); + String _selectedFilter = 'Запомнить'; // Constants for spacing and dimensions static const double _horizontalPadding = 16; @@ -366,22 +367,25 @@ class _CreateScreenState extends State { } Widget _filters() { - return AppDebug( - builder: (context, isDebug) { - if (!isDebug) return const SizedBox(); - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - _buildFilterButton(AppColors.gray_bg, 'Запомнить', () {}), - const WSpace(10), - _buildFilterButton(AppColors.white, 'Держать в фокусе', () {}), - ], - ); - }, + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + _buildFilterButton('Запомнить', () { + safeSetState(() { + _selectedFilter = 'Запомнить'; + }); + }), + const WSpace(10), + _buildFilterButton('Держать в фокусе', () { + safeSetState(() { + _selectedFilter = 'Держать в фокусе'; + }); + }), + ], ); } - Widget _buildFilterButton(Color color, String title, VoidCallback onTap) { + Widget _buildFilterButton(String title, VoidCallback onTap) { return GestureDetector( onTap: onTap, child: Container( @@ -389,7 +393,7 @@ class _CreateScreenState extends State { height: 36.h, decoration: BoxDecoration( borderRadius: BorderRadius.circular(16).r, - color: color, + color: _selectedFilter == title ? AppColors.white : AppColors.gray_bg, ), child: Center(child: AppTypography(title, type: SemiBold14px())), ),