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,13 +1,22 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:remever/common/resources.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/database/database.dart';
import 'package:remever/models/training_dto.dart';
class TrainingTicket extends StatelessWidget {
const TrainingTicket({super.key, this.isAnswer = false});
const TrainingTicket({
super.key,
this.isAnswer = false,
required this.trainingDto,
});
final TrainingDto trainingDto;
final bool isAnswer;
@override
@@ -43,8 +52,10 @@ class TrainingTicket extends StatelessWidget {
}
Widget _buildCollectionInfo() {
final collection = trainingDto.collection;
return Wif(
condition: !isAnswer,
condition: !isAnswer && collection != null,
builder: (context) {
return Padding(
padding: const EdgeInsets.only(bottom: 8).r,
@@ -53,16 +64,28 @@ class TrainingTicket extends StatelessWidget {
SizedBox(
height: 24.h,
width: 24.w,
child: ClipOval(
child: Image.network(
'https://avatars.mds.yandex.net/i?id=56429b65e9098a58fcd538387d43bcbb_l-5384017-images-thumbs&n=13',
fit: BoxFit.cover,
),
child: Wif(
condition: collection!.image != null,
builder:
(context) => ClipOval(
child: Image.file(
File(collection.image!),
fit: BoxFit.cover,
),
),
fallback:
(context) => Center(
child: AppTypography(
collection.title.substring(0, 1),
type: Bold34px(),
),
),
),
),
WSpace(4),
AppTypography(
'Астрология и астрофизика',
collection.title,
type: Regular14px(),
color: AppColors.disabled,
),
@@ -70,6 +93,7 @@ class TrainingTicket extends StatelessWidget {
),
);
},
fallback: (context) => Row(children: []),
);
}
@@ -90,20 +114,21 @@ class TrainingTicket extends StatelessWidget {
}
Widget _buildText(BuildContext context) {
final ticket = trainingDto.ticket;
return AppTypography(
'Родился 19 февраля 1473 года в Торуне в семье купца. После смерти отца воспитывался у дяди, епископа Вармийской епархии. Коперник изложил свои идеи в сочинении «Commentariolus» («Малый комментарий»), в котором сформулировал основные положения гелиоцентрической системы мира в виде 6 аксиом. Их смысл состоит в том, что Земля, как и другие планеты,'
'Родился 19 февраля 1473 года в Торуне в семье купца. После смерти отца воспитывался у дяди, епископа Вармийской епархии. Коперник изложил свои идеи в сочинении «Commentariolus» («Малый комментарий»), в котором сформулировал основные положения гелиоцентрической системы мира в виде 6 аксиом. Их смысл состоит в том, что Земля, как и другие планеты,',
isAnswer ? ticket.answer : ticket.question,
maxLines: 99,
type: Regular14px(),
);
}
Widget _buildImage() {
// final imageBytes =
// isAnswer ? ticket.answerImage : ticket.questionImage;
final ticket = trainingDto.ticket;
final String? imagePath =
isAnswer ? ticket.answerImage : ticket.questionImage;
return Wif(
condition: true, // imageBytes != null,
condition: imagePath != null,
builder:
(context) => Padding(
padding: const EdgeInsets.only(right: 8).r,
@@ -111,11 +136,7 @@ class TrainingTicket extends StatelessWidget {
dimension: 100.r,
child: ClipRRect(
borderRadius: BorderRadius.circular(8).r,
// child: Image.memory(imageBytes!, fit: BoxFit.cover),
child: Image.network(
'https://avatars.mds.yandex.net/i?id=56429b65e9098a58fcd538387d43bcbb_l-5384017-images-thumbs&n=13',
fit: BoxFit.cover,
),
child: Image.file(File(imagePath!), fit: BoxFit.cover),
),
),
),