открыть или перейти к новой форме блока при нажатии события

#flutter #events #listener #bloc

#flutter #Мероприятия #прослушиватель #блок

Вопрос:

У меня есть 2 блока регистрации и входа в систему, кнопка регистрации на странице входа в систему. Я хочу перенаправить на страницу регистрации с помощью кнопки регистрации входа, вот фрагмент. получение ошибки, подобной этой

 child: new RaisedButton(
          color: Colors.red[800],
          textColor: Colors.white,
          child: new Text(
            'REGISTER',
            style: TextStyle(fontSize: 18, fontWeight: FontWeight.w400),
          ),
          onPressed: () => BlocListener(
              //bloc: RegistrationPageBloc,
              listener:
                  (BuildContext context, RegistrationFormState state) {
                Navigator.of(context).push(
                    MaterialPageRoute(builder: (BuildContext context) {
                  return RegistrationForm();
                }));
              }),
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(20.0),
          ),
        ),
 

введите описание изображения здесь

Ответ №1:

Удалить bloclistener

 child: new RaisedButton(
          color: Colors.red[800],
          textColor: Colors.white,
          child: new Text(
            'REGISTER',
            style: TextStyle(fontSize: 18, fontWeight: FontWeight.w400),
          ),
          onPressed: () => 
                Navigator.of(context).push(
                    MaterialPageRoute(builder: (BuildContext context) {
                  return RegistrationForm();
                })),
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(20.0),
          ),
        ),
 

Комментарии:

1. Та же ошибка; К вашему сведению: регистрационная форма также является страницей блока.

2. можете ли вы предоставить код регистрационной формы

3. Пожалуйста, проверьте эту ссылку file.io/k8o2qVAEVv2a

4. после открытия ссылки появляется страница с сообщением «Запрошенный вами файл удален»

5. Вы нашли что-нибудь?

Ответ №2:

Ваш родительский виджет не передает ваше registrationBloc желание дочернему элементу с BlocListener помощью, что приводит к контексту без предоставленного RegistrationBloc .

Вам нужно обернуть своего родителя с помощью BlocProvider. Например:

 BlocProvider(
 create: (_) => RegistrationBloc(),
 child: RaisedButton(
    child: BlocListener(),
  )
),
 

Комментарии:

1. Спасибо за ваш ответ! Это мне не поможет, как я уже упоминал, у меня есть 2 разных блока LoginBloc и RegistrationBloc , и я уже использовал LoginBloc в родительском блоке.

2. В этом случае передайте свой блок по значению с помощью BlocProvider.value !

Ответ №3:

Вы можете использовать два блока для предоставления одной и той же страницы с помощью MultiBlocProvider

 MultiBlocProvider(
        providers: [
           BlocProvider(
                create: (context) => RegistrationBloc(),
           ),
            BlocProvider(
              create: (context) => LoginBloc(),
           ),
           ],
            child: YourPage(),
       );
 

Комментарии:

1. Спасибо за ответ, но все еще не работает, пожалуйста, подтвердите возврат этого кода MaterialApp( home: Scaffold( body: MultiBlocProvider(поставщики: [ BlocProvider( create: (context) => RegistrationPageBloc(), ), BlocProvider( create: (context) => LoginPageBloc(), ), BlocProvider( create: (context) => LoginPageBloc(), ), BlocProvider( create: (contextконтекст) => FPPageloc(), ), ], дочерний элемент: FPForm(), )

2. У меня есть разные страницы для каждого!

3. Я могу передать блок на другую страницу с помощью конструктора