у меня есть поле с именем highScore
, его данные сохраняются в общих настройках, и я хочу вернуть ie это данные и показывать в first_page
, которые отображаются при первом запуске приложения, но при первом запуске просто говорит ноль, и мне нужно go до quiz_page
и вернуться, чтобы получить данные, хотя я пытался загрузить данные из initState()
.
question_bank
class QuestionBank {
static final QuestionBank _questionBank = QuestionBank._internal();
factory QuestionBank() {
return _questionBank;
}
QuestionBank._internal();
int _questionNumber = 0;
int _score = 0;
int highScore;
incrementCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
highScore = (prefs.getInt('counter') ?? 0) + 1;
prefs.setInt('counter', highScore);
}
loadCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
highScore = (prefs.getInt('counter') ?? 0);
}
int getScore() => _score;
int getLength() => _questionList.length;
}
first_page
class FirstPage extends StatefulWidget {
@override
_FirstPageState createState() => _FirstPageState();
}
class _FirstPageState extends State<FirstPage> {
QuestionBank questionBank;
@override
void initState() {
super.initState();
questionBank = QuestionBank();
questionBank.loadCounter();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
backgroundColor: Colors.white24,
body: Padding(
padding: const EdgeInsets.only(top: 40),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
'High Score: ${questionBank.highScore}',
style: titleStyle,
),
SizedBox(
height: 76,
),
Padding(
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
child: Image(
image: AssetImage(
'images/logoDesigne7crop.png',
),
),
),
SizedBox(
height: 30,
),
Container(
height: 70,
width: double.infinity,
margin: EdgeInsets.all(10),
child: ChoiceButton(
btnText: 'start the quiz',
tap: () {
Navigator.of(context).pushNamed(startQuizRoute);
}),
),
Container(
height: 70,
margin: EdgeInsets.all(10),
width: double.infinity,
child: ChoiceButton(
btnText: 'search',
tap: () {
Navigator.of(context).pushNamed(searchRoute);
})),
],
),
),
),
);
}
}
quiz_page
class QuizPage extends StatefulWidget {
@override
_QuizPageState createState() => _QuizPageState();
}
class _QuizPageState extends State<QuizPage>
with SingleTickerProviderStateMixin {
QuestionBank questionBank = QuestionBank();
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top: 14, right: 8, left: 6),
child: TopRow(questionBank: questionBank),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 40),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Center(
child: Text(questionBank.getQuestionTitle(),
textAlign: TextAlign.center, style: titleStyle),
),
Padding(
padding: const EdgeInsets.only(top: 30, bottom: 20),
child: Image.asset(
questionBank.getQuestionImage(),
height: 180,
),
),
SizedBox(
height: 76,
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 12.0, vertical: 5),
child: ChoiceButton(
btnText: 'Fruit',
tap: () {
setState(() {
questionBank.bigCheck(1);
});
},
),
),
),
SizedBox(
height: 76,
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 12.0, vertical: 5),
child: ChoiceButton(
btnText: 'Vegetable',
tap: () {
setState(() {
questionBank.bigCheck(2);
});
},
),
),
),
SizedBox(
height: 76,
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 12.0, vertical: 5),
child: ChoiceButton(
btnText: 'Fungus',
tap: () {
setState(() {
questionBank.bigCheck(3);
});
},
),
),
),
SizedBox(
height: 76,
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 12.0, vertical: 5),
child: ChoiceButton(
btnText: 'Berry',
tap: () {
setState(() {
questionBank.bigCheck(4);
});
},
),
),
),
],
),
),
],
),
),
);
}
}
class TopRow extends StatelessWidget {
const TopRow({
Key key,
@required this.questionBank,
}) : super(key: key);
final QuestionBank questionBank;
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'High Score: ${questionBank.highScore}',
style: TextStyle(fontSize: 25, color: Colors.white),
),
SizedBox(
height: 10,
),
Row(
children: <Widget>[
Text(
'Score: ${questionBank.getScore()}',
style: TextStyle(fontSize: 25, color: Colors.white),
),
SizedBox(
width: 220,
),
Icon(
FontAwesome.heart,
size: 26,
),
Icon(
Icons.audiotrack,
size: 26,
),
],
)
],
);
}
}