#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. Я могу передать блок на другую страницу с помощью конструктора