В HomeScreen.dart у меня есть выпадающее меню для выбора типа экзамена. Когда экзамен выбран, вопрос QuestionBlo c создается и получает вопросы для выбранного экзамена. Я вижу, что в консоли выбираются вопросы и создается следующее состояние (QuestionIsLoaded). Тем не менее, в HomeScreen я не могу получить доступ к вопросам и по-прежнему показывает только состояние ExamBlo c в консоли, поэтому он не переходит на следующую страницу.
Я не мог понять, где я допустил ошибку.
class HomeScreen extends StatelessWidget {
static const String id = "HomeScreen";
@override
Widget build(BuildContext context) {
return Scaffold(
body: BlocProvider(
create: (context) => ExamBloc(), child: ExamSelect()
),
);
}
}
class ExamSelect extends StatefulWidget {
@override
_ExamSelectState createState() => _ExamSelectState();
}
class _ExamSelectState extends State<ExamSelect> {
var dropdownValue ;
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<ExamBloc>(
create: (BuildContext context) => ExamBloc(),
),
BlocProvider<QuestionBloc>(
create: (BuildContext context) => QuestionBloc()),
],
child: BlocBuilder<ExamBloc, ExamState>(builder: (context, state) {
final ExamBloc examBloc = BlocProvider.of<ExamBloc>(context);
examBloc.add(FetchExam());
print(state);
if (state is ExamIsLoading)
return Center(child: CircularProgressIndicator());
if (state is ExamIsLoaded)
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Expanded(
child: Row(
children: <Widget>[
Expanded(
child: Card(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const ListTile(
title: Center(child: Text('Select Exam')),
),
Container(
child: DropdownButton<String>(
hint: Text('Select Exam'),
value: dropdownValue,
icon: Icon(Icons.arrow_downward),
iconSize: 24,
elevation: 16,
style: TextStyle(
color: Colors.deepPurple),
underline: Container(
height: 2,
color: Colors.deepPurpleAccent,
),
onChanged: (String newValue) {
print('from onchanged');
setState(() {
dropdownValue = newValue;
});
/* final QuestionBloc questiontBloc = BlocProvider.of<
QuestionBloc>(context);
questiontBloc.add(FetchQuestionEvent(
dropdownValue));
print(state.toString());
},
items: state.ListOfExams.map<
DropdownMenuItem<String>>((
String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
),
),
FlatButton(
child: Center(
child: const Text('Select')),
onPressed: () {
final QuestionBloc questiontBloc = BlocProvider.of<
QuestionBloc>(context);
questiontBloc.add(FetchQuestionEvent(
dropdownValue));
print('clicked');
if (state is QuestionIsLoaded) {
print(questiontBloc.toString());
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) {
return QuizScreen(
state.questionList
);
},
));
}
}
),
],
),
),
),
],
),
)
],
),
);
},
));
// final ExamBloc examBloc = BlocProvider.of<ExamBloc>(context);
// final QuestionBloc questionBloc = BlocProvider.of<QuestionBloc>(context);
}
}