feature(training): отбражение данных для тренировки

This commit is contained in:
2025-09-08 22:44:03 +03:00
parent 90531e6e4e
commit 845a380fbf
14 changed files with 1591 additions and 58 deletions

View File

@@ -1,16 +1,13 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:remever/common/resources.dart';
import 'package:remever/common/typography.dart';
import 'package:remever/common/widgets/typography.dart';
import 'package:remever/common/widgets/w_if.dart';
import 'package:remever/common/widgets/wspace.dart';
import 'package:remever/components/extensions/context.dart';
import 'package:remever/components/extensions/state.dart';
import 'package:remever/gen/assets.gen.dart';
import 'package:remever/router.gr.dart';
import 'package:remever/models/training_dto.dart';
import 'package:remever/screens/training/cubit/training_cubit.dart';
import 'package:remever/screens/training/states/empty.dart';
import 'package:remever/screens/training/states/loading.dart';
@@ -40,7 +37,7 @@ class TrainingScreen extends StatelessWidget {
return state.when(
loading: () => TrainingLoading(),
empty: () => TrainingEmpty(),
data: () => TrainingData(),
data: (data) => TrainingData(data: data),
result: () => Placeholder(),
);
},
@@ -50,8 +47,9 @@ class TrainingScreen extends StatelessWidget {
}
class TrainingData extends StatefulWidget {
const TrainingData({super.key});
const TrainingData({super.key, required this.data});
final List<TrainingDto> data;
@override
State<TrainingData> createState() => _TrainingDataState();
}
@@ -59,6 +57,8 @@ class TrainingData extends StatefulWidget {
class _TrainingDataState extends State<TrainingData> {
bool _showAnswer = false;
int _currentTicketIndex = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
@@ -97,7 +97,12 @@ class _TrainingDataState extends State<TrainingData> {
),
child: Padding(
padding: const EdgeInsets.all(3).r,
child: Center(child: AppTypography('1 из 9', type: Regular14px())),
child: Center(
child: AppTypography(
'${_currentTicketIndex + 1} из ${widget.data.length}',
type: Regular14px(),
),
),
),
),
);
@@ -117,7 +122,13 @@ class _TrainingDataState extends State<TrainingData> {
children: [
Flexible(
child: PrimaryButton(
onTap: () {},
onTap: () {
if (widget.data.length == _currentTicketIndex + 1) {
context.read<TrainingCubit>().toResultState();
return;
}
safeSetState(() => _currentTicketIndex++);
},
color: AppColors.danger,
child: AppTypography(
'Не помню',
@@ -133,7 +144,13 @@ class _TrainingDataState extends State<TrainingData> {
type: Medium14px(),
color: Colors.white,
),
onTap: () {},
onTap: () {
if (widget.data.length == _currentTicketIndex + 1) {
context.read<TrainingCubit>().toResultState();
return;
}
safeSetState(() => _currentTicketIndex++);
},
),
),
],
@@ -171,10 +188,14 @@ class _TrainingDataState extends State<TrainingData> {
child: Column(
spacing: 8.r,
children: [
TrainingTicket(),
TrainingTicket(trainingDto: widget.data[_currentTicketIndex]),
Wif(
condition: _showAnswer,
builder: (context) => TrainingTicket(isAnswer: true),
builder:
(context) => TrainingTicket(
trainingDto: widget.data[_currentTicketIndex],
isAnswer: true,
),
),
],
),