gpt4 book ai didi

list - ( Dart/flutter )从混洗的列表中拉出一项而不重新生成列表

转载 作者:行者123 更新时间:2023-12-03 03:40:23 24 4
gpt4 key购买 nike

我是新手,这是我第一个自己的应用程序项目,我无法做任何事情。

我想对列表进行随机排序,以便它以随机顺序显示问题,但一次只能显示一个,并且我不希望重复。当我尝试执行此操作时,每次都会重新生成一个新的随机列表,有什么方法可以只生成一次,然后一次从中拉出一个问题,而无需重复问题?

我有一个名为“_questionBankEasy”的列表,该列表长15项,我想从中提取。
我之所以使用它,是因为这似乎与我所能找到的答案非常接近:List.shuffle() in Dart?

//inside question_bank.dart
import 'dart:math' as math;

//shuffled list
List<String> shuffle(List questionBankEasy) {
var random = math.Random();

for (var i = questionBankEasy.length - 1; i > 0; i--) {
var n = random.nextInt(i + 1);

var temp = questionBankEasy[i];
questionBankEasy[i] = questionBankEasy[n];
questionBankEasy[n] = temp;
}
return questionBankEasy;
}

int _questionNumber = 0;

//generates a shuffled list
String getQuestionTextEasy() {
return shuffle(_questionBankEasy)[_questionNumber];
}

// pulls next question
void nextQuestion() {
if (selectedDifficulty == Difficulty.easy &&
_questionNumber < _questionBankEasy.length - 1) {
_questionNumber++;
print(_questionNumber);
}

//inside questionscreen_text.dart
class QuestionScreenText extends StatelessWidget {
QuestionScreenText();

@override
Widget build(BuildContext context) {
if (selectedDifficulty == Difficulty.easy) {
return Text(
QuizGenerator().getQuestionTextEasy(),
style: kQuestionLable,
textAlign: TextAlign.center,
);
}

//inside question_screen.dart
class QuestionScreen extends StatefulWidget {
@override
_QuestionScreenState createState() => _QuestionScreenState();
}
class _QuestionScreenState extends State<QuestionScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: kDarkGreyRed,
body: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(25.0),
child: QuestionScreenText(),
),
IconButton(
padding: EdgeInsets.all(0),
icon: Icon(Icons.close),
iconSize: 100.0,
color: kWhiteColour,
disabledColor: Colors.transparent,
highlightColor: Colors.transparent,
splashColor: kPinkColour,
onPressed: () {
setState(() {
QuizGenerator().nextQuestion();
});
},
),
]
);
}
}

我希望它能起作用,但是却没有,结果是代码从列表中拉出了一个项目,但是当我按下调用nextQuestion()的“下一步”按钮时,有时会遇到一个重复的问题。这个可以解决吗?

最佳答案

您可以在模拟器中运行的一个非常基本的示例。
在代码中添加了注释,请仔细阅读。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

// List of questions from some data point
List<String> questions = [
'Question 1',
'Question 2',
'Question 3',
'Question 4',
'Question 5',
'Question 6',
'Question 7',
'Question 8',
'Question 9',
'Question 10',
'Question 11',
'Question 12',
'Question 13',
];

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Page(),
);
}
}

class Page extends StatefulWidget {
@override
State<StatefulWidget> createState() => _PageState();
}

class _PageState extends State<Page> with SingleTickerProviderStateMixin {
// Variables to hold questions list and current question
List<String> _pageQuestions;
String _currentQuestion;

@override
void initState() {
// Initialize pageQuestions with a copy of initial question list
_pageQuestions = questions;
super.initState();
}

void _shuffleQuestions() {
// Initialize an empty variable
String question;

// Check that there are still some questions left in the list
if (_pageQuestions.isNotEmpty) {
// Shuffle the list
_pageQuestions.shuffle();
// Take the last question from the list
question = _pageQuestions.removeLast();
}
setState(() {
// call set state to update the view
_currentQuestion = question;
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
padding: EdgeInsets.symmetric(horizontal: 20.0),
child: ListView(
shrinkWrap: true,
primary: false,
children: <Widget>[
if (_pageQuestions.isNotEmpty && _currentQuestion == null)
Text('Press the "NEXT QUESTION" button'),
if (_pageQuestions.isEmpty) Text('No more questions left'),
if (_pageQuestions.isNotEmpty && _currentQuestion != null)
Text(
'${_currentQuestion} (Questions left: ${_pageQuestions.length})'),
RaisedButton(
onPressed: _shuffleQuestions,
child: Text('NEXT QUESTION'),
)
],
),
),
),
);
}
}

关于list - ( Dart/flutter )从混洗的列表中拉出一项而不重新生成列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56833039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com