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 {
try {

View File

@@ -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: <Widget>[
_buildIconWithText(
icon: Assets.icons.typeCards,
color: AppColors.disabled,
text: collection.likesCount.toString(),
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,
color: AppColors.disabled,
text: snapshot.data.toString(),
);
},
),
const WSpace(8),
_buildIconWithText(

View File

@@ -36,6 +36,7 @@ class CreateScreen extends StatefulWidget {
class _CreateScreenState extends State<CreateScreen> {
CreateTicketDto _dto = CreateTicketDto();
String _selectedFilter = 'Запомнить';
// Constants for spacing and dimensions
static const double _horizontalPadding = 16;
@@ -366,22 +367,25 @@ class _CreateScreenState extends State<CreateScreen> {
}
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<CreateScreen> {
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())),
),