mnemo_cards/lib/features/tests/test_progress_widget.dart

86 lines
2.2 KiB
Dart
Raw Normal View History

2024-06-11 00:28:57 +00:00
import 'dart:async';
2024-05-22 20:48:44 +00:00
import 'dart:math';
import 'package:auto_route/auto_route.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:mnemo_cards/features/tests/progress_widget.dart';
import 'package:rxdart/rxdart.dart';
import '../../di/locator.dart';
import '../../theme/themes.dart';
class TestProgressWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() => _TestProgressWidgetState();
const TestProgressWidget({super.key});
}
class _TestProgressWidgetState extends State<TestProgressWidget> {
List<Result> results = [];
int length = 0;
Stream<Duration>? timer;
2024-06-12 23:00:13 +00:00
bool _active = false;
2024-06-11 00:28:57 +00:00
void _updateDataListener() {
2024-06-12 23:00:13 +00:00
if (!_active) {
_active = true;
Timer(Duration(milliseconds: 100), () => _updateData());
2024-06-11 00:28:57 +00:00
}
}
2024-05-22 20:48:44 +00:00
void _updateData() {
results = <Result>[
Result.correct,
];
length = locator.testManager.questions.length + 1;
2024-06-11 00:28:57 +00:00
final pageController = locator.testManager.pageController;
2024-05-22 20:48:44 +00:00
for (final state in locator.testManager.states) {
if (state.isAnswered) {
if (state.isCorrect) {
results.add(Result.correct);
} else {
// results.add(Result.wrong);
2024-06-11 00:28:57 +00:00
results.add(Result.wrong);
2024-05-22 20:48:44 +00:00
}
2024-06-08 23:34:38 +00:00
} else if (state.isSkipped) {
2024-06-11 00:28:57 +00:00
results.add(Result.skiped);
2024-05-22 20:48:44 +00:00
} else {
2024-06-08 23:34:38 +00:00
results.add(Result.not_visited);
2024-05-22 20:48:44 +00:00
}
}
2024-06-12 23:00:13 +00:00
print('Update data ${results.map((e) => e.name).join(' ')}');
2024-05-22 20:48:44 +00:00
if (mounted) {
setState(() {});
}
2024-06-12 23:00:13 +00:00
_active = false;
2024-05-22 20:48:44 +00:00
}
@override
void initState() {
super.initState();
2024-06-11 00:28:57 +00:00
locator.testManager.pageController.removeListener(_updateDataListener);
locator.testManager.pageController.addListener(_updateDataListener);
2024-06-13 05:06:50 +00:00
// timer = Stream.periodic(
// Duration(seconds: 1),
// (tick) => Duration(seconds: 300 - tick - 1),
// ).startWith(Duration(seconds: 300)).take(300);
2024-05-22 20:48:44 +00:00
_updateData();
}
@override
Widget build(BuildContext context) {
return ProgressWidget(
results,
length,
locator.testManager.color,
timer: timer,
);
}
}