Learning Blo c шаблон, и я наткнулся на это. На первой странице ExamBlo c обрабатывает выбор экзаменов и отображение. После того, как пользователь выбрал экзамен, открывается страница викторины с выбранным экзаменом. QuestionBlo c извлекает вопросы и передает их виджету с сохранением состояния для отображения вопросов. Вопрос отображается правильно.
Однако вся страница непрерывно перестраивается без причины. Я попробовал виджет с полным состоянием и без состояния виджета QuizScreen, но все еще не могу остановить восстановление. Любая помощь приветствуется.
´´´
class _QuizScreenState extends State<QuizScreen> {
@override
Widget build(BuildContext context) {
final QuestionBloc questionBloc = context.bloc<QuestionBloc>();
questionBloc.add(FetchQuestion(widget.selectedExam));
return
BlocBuilder<QuestionBloc,QuestionState>(
bloc: questionBloc,
builder: (context, state) {
print('entrance'+state.toString());
if (state is QuestionIsLoading)
return Center(child: CircularProgressIndicator());
if (state is QuestionIsLoaded){
final QuizBrain quizBrain =QuizBrain(state.questionList);
List<QuestionModel> ql=state.questionList;
return Scaffold(
body: Choices(quizBrain: quizBrain, questionList: ql));}
},
);
}
}
class Choices extends StatefulWidget {
Choices({@required this.quizBrain,@required this.questionList});
final List<QuestionModel> questionList;
final QuizBrain quizBrain;
@override
_ChoicesState createState() => _ChoicesState();
}
class _ChoicesState extends State<Choices> {
var _selection;
onChangedRB(String value) { setState(() { _selection = value; });
print('onchange clicked');
print(value);
widget.quizBrain.nextQuestion();
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
widget.quizBrain.getNextQuestion().content,
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontWeight: FontWeight.bold),
),
Container(child: RB(choice:widget.quizBrain.getNextQuestion().content,value:'A',groupValue:_selection,onChanged:onChangedRB
)),
],
);
}
}
´´´