2023-11-28 10:44:58 +08:00
|
|
|
|
// ignore_for_file: unnecessary_overrides
|
|
|
|
|
|
|
|
|
|
import 'dart:async';
|
2023-12-02 00:45:45 +08:00
|
|
|
|
import 'package:dreampad/app/models/models.dart';
|
2023-11-28 10:44:58 +08:00
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:get/get.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) {
|
2023-11-29 20:37:45 +08:00
|
|
|
|
Get.back(result: {'id': '1'});
|
2023-11-28 10:44:58 +08:00
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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 = '';
|
|
|
|
|
}
|
|
|
|
|
}
|