feature(collection): Подсчет кол-ва карточек в коллекции

This commit is contained in:
2025-09-08 21:13:16 +03:00
parent 51c4ae4f02
commit 6cb9e82e61
3 changed files with 50 additions and 18 deletions

View File

@@ -27,6 +27,20 @@ class TicketsDao extends DatabaseAccessor<AppDatabase> with _$TicketsDaoMixin {
} }
} }
/// Получение билетов из базы данных
Future<int> 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<void> removeTicket(String id) async { Future<void> removeTicket(String id) async {
try { try {

View File

@@ -12,6 +12,7 @@ import 'package:remever/common/widgets/wspace.dart';
import 'package:remever/components/extensions/context.dart'; import 'package:remever/components/extensions/context.dart';
import 'package:remever/database/database.dart'; import 'package:remever/database/database.dart';
import 'package:remever/gen/assets.gen.dart'; import 'package:remever/gen/assets.gen.dart';
import 'package:remever/inject.dart';
import 'package:remever/router.gr.dart'; import 'package:remever/router.gr.dart';
import 'package:remever/screens/collections/widgets/collection_progress_bar.dart'; import 'package:remever/screens/collections/widgets/collection_progress_bar.dart';
import 'package:remever/screens/dialogs/action_dialog.dart'; import 'package:remever/screens/dialogs/action_dialog.dart';
@@ -130,10 +131,23 @@ class CollectionCard extends StatelessWidget {
Widget _buildLikeAndCardsLength() { Widget _buildLikeAndCardsLength() {
return Row( return Row(
children: <Widget>[ children: <Widget>[
_buildIconWithText( FutureBuilder(
future: getIt<AppDatabase>().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, icon: Assets.icons.typeCards,
color: AppColors.disabled, color: AppColors.disabled,
text: collection.likesCount.toString(), text: snapshot.data.toString(),
);
},
), ),
const WSpace(8), const WSpace(8),
_buildIconWithText( _buildIconWithText(

View File

@@ -36,6 +36,7 @@ class CreateScreen extends StatefulWidget {
class _CreateScreenState extends State<CreateScreen> { class _CreateScreenState extends State<CreateScreen> {
CreateTicketDto _dto = CreateTicketDto(); CreateTicketDto _dto = CreateTicketDto();
String _selectedFilter = 'Запомнить';
// Constants for spacing and dimensions // Constants for spacing and dimensions
static const double _horizontalPadding = 16; static const double _horizontalPadding = 16;
@@ -366,22 +367,25 @@ class _CreateScreenState extends State<CreateScreen> {
} }
Widget _filters() { Widget _filters() {
return AppDebug(
builder: (context, isDebug) {
if (!isDebug) return const SizedBox();
return Row( return Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
_buildFilterButton(AppColors.gray_bg, 'Запомнить', () {}), _buildFilterButton('Запомнить', () {
safeSetState(() {
_selectedFilter = 'Запомнить';
});
}),
const WSpace(10), const WSpace(10),
_buildFilterButton(AppColors.white, 'Держать в фокусе', () {}), _buildFilterButton('Держать в фокусе', () {
safeSetState(() {
_selectedFilter = 'Держать в фокусе';
});
}),
], ],
); );
},
);
} }
Widget _buildFilterButton(Color color, String title, VoidCallback onTap) { Widget _buildFilterButton(String title, VoidCallback onTap) {
return GestureDetector( return GestureDetector(
onTap: onTap, onTap: onTap,
child: Container( child: Container(
@@ -389,7 +393,7 @@ class _CreateScreenState extends State<CreateScreen> {
height: 36.h, height: 36.h,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16).r, borderRadius: BorderRadius.circular(16).r,
color: color, color: _selectedFilter == title ? AppColors.white : AppColors.gray_bg,
), ),
child: Center(child: AppTypography(title, type: SemiBold14px())), child: Center(child: AppTypography(title, type: SemiBold14px())),
), ),