feature(collection): Подсчет кол-ва карточек в коллекции
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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(
|
||||||
icon: Assets.icons.typeCards,
|
future: getIt<AppDatabase>().ticketsDao.getTicketsInCollectionCount(
|
||||||
color: AppColors.disabled,
|
collection.id,
|
||||||
text: collection.likesCount.toString(),
|
),
|
||||||
|
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),
|
const WSpace(8),
|
||||||
_buildIconWithText(
|
_buildIconWithText(
|
||||||
|
|||||||
@@ -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(
|
return Row(
|
||||||
builder: (context, isDebug) {
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
if (!isDebug) return const SizedBox();
|
children: [
|
||||||
return Row(
|
_buildFilterButton('Запомнить', () {
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
safeSetState(() {
|
||||||
children: [
|
_selectedFilter = 'Запомнить';
|
||||||
_buildFilterButton(AppColors.gray_bg, 'Запомнить', () {}),
|
});
|
||||||
const WSpace(10),
|
}),
|
||||||
_buildFilterButton(AppColors.white, 'Держать в фокусе', () {}),
|
const WSpace(10),
|
||||||
],
|
_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())),
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user