dreampad/lib/app/modules/question/controllers/question_controller.dart

114 lines
3.1 KiB
Dart
Raw Normal View History

2023-11-28 10:44:58 +08:00
// ignore_for_file: unnecessary_overrides
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../models/question_answer_model.dart';
class QuestionController extends GetxController {
final step = 0.obs;
final ipLeft = 149.obs;
final ipTop = 42.obs;
final question = ''.obs;
2023-11-28 20:25:09 +08:00
final guide = ''.obs;
2023-11-28 10:44:58 +08:00
final btnTxt = ''.obs;
final allAnswer = false.obs;
final showQuestionDialog = false.obs;
final questionAnswers = RxList<Rx<QuestionAnswer>>([]);
final TextEditingController textController = TextEditingController();
final int second = 5;
StreamSubscription<dynamic>? subscription;
@override
void onInit() {
super.onInit();
btnTxt.value = '开始';
question.value = '没想好梦想职业吗?没关系,我来问你几个关于你自己的问题,我们一起想想吧!';
questionAnswers.add(QuestionAnswer(
index: 1,
left: 37.0,
top: 126.0,
question: '你平常最喜欢的事情是什么?做什么事最能让你开心?',
display: false,
answer: '',
2023-11-28 20:25:09 +08:00
guide: '我平常喜欢滑板,因为喜欢速度和挑战',
2023-11-28 10:44:58 +08:00
).obs);
questionAnswers.add(QuestionAnswer(
index: 2,
left: 802.0,
top: 222.0,
question: '你的偶像是谁你最喜欢TA的哪些地方',
display: false,
answer: '',
2023-11-28 20:25:09 +08:00
guide: '我的偶像时IU',
2023-11-28 10:44:58 +08:00
).obs);
questionAnswers.add(QuestionAnswer(
index: 3,
left: 186.0,
top: 349.0,
question: '你想变成电影、动画、故事中的哪个角色?原因是什么?',
display: false,
answer: '',
2023-11-28 20:25:09 +08:00
guide: '我想变成某某电影里的某某,因为电影',
2023-11-28 10:44:58 +08:00
).obs);
}
@override
void onReady() {
super.onReady();
}
@override
void onClose() {
textController.dispose();
subscription?.cancel();
super.onClose();
}
Future setStep() async {
btnTxt.value = '我要回答';
bool hasQuestion = false;
for (var questionAnswer in questionAnswers) {
if (!questionAnswer.value.display!) {
if (questionAnswer.value.index != step.value) {
showQuestionDialog.value = false;
} else {
showQuestionDialog.value = true;
}
step.value = questionAnswer.value.index!;
question.value = questionAnswer.value.question!;
2023-11-28 20:25:09 +08:00
guide.value = questionAnswer.value.guide;
2023-11-28 10:44:58 +08:00
allAnswer.value = false;
hasQuestion = true;
break;
}
}
if (!hasQuestion) {
ipLeft.value = 409;
ipTop.value = 42;
showQuestionDialog.value = false;
allAnswer.value = true;
subscription = Stream.periodic(const Duration(seconds: 1), (int i) => i)
.take(second)
.listen((int i) {
if (i >= second - 1) {
Get.back(result: {'id': '2'});
}
});
}
}
Future updateAnswer(String answer) async {
var questionAnswer =
questionAnswers.firstWhere((t) => t.value.index == step.value);
questionAnswer.update((val) {
val!.answer = answer;
val.display = true;
});
await setStep();
textController.text = '';
}
}