Флаттер MultiblocProvider - PullRequest
       50

Флаттер MultiblocProvider

0 голосов
/ 23 марта 2020

В 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);



  }
}
...