Как установить рекорд для викторины / игры в флаттер?
В первый раз, когда мы открываем, чтобы установить высокий балл как 0, во флаттере он будет проверяться с баллом и обновлять свое значение я тоже использовал общие настройки, это не работает.
import './question.dart';
import 'package:shared_preferences/shared_preferences.dart';
class Quiz {
List<Question> _questions;
int _currentQuestionIndex = -1;
int _score = 0;
int _highscore;
Future checkFirstSeen() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
bool _seen = (prefs.getBool('seen') ?? false);
if (_seen) {
_highscore=_highscore;
} else {
prefs.setBool('seen', true);
_highscore=0;
}
}
Quiz(this._questions) {
_questions.shuffle();
}
List<Question> get questions => _questions;
int get length => _questions.length;
int get questionNumber => _currentQuestionIndex+1;
int get score => _score;
int get highscore => _highscore;
Question get nextQuestion {
_currentQuestionIndex++;
if (_currentQuestionIndex >= length) return null;
return _questions[_currentQuestionIndex];
}
void answer(bool isCorrect) {
if (isCorrect) _score++;
}
//added fun for highscore
void check() {
if (_score > _highscore) {
_highscore = _score;
} else {
_highscore = _highscore;
}
}
}
это возвращает мне всегда балл и высокий балл как одно и то же значение (число). Скажите мне решение
1 ответ
Если я правильно понимаю, что вы пытаетесь сделать, вам нужно отредактировать Quiz.checkFirstSeen()
а также Quiz.check()
методы следующим образом:
Future<void> checkFirstSeen() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
_highscore = prefs.getInt('highScore') ?? 0;
}
Future<void> check() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
if (_score > _highscore) {
_highscore = _score;
await prefs.setInt('highScore', _highscore);
}
}
В коде, который вы опубликовали, вам на самом деле не нужно seen
переменная общего доступа, поэтому я удалил это.