Я знаю, что некоторые из моих BLOC будут созданы только один раз на протяжении жизненного цикла приложения. Это плохая практика или анти-шаблон - создавать эти классы BLOC как одноэлементные. Синглтон может помочь в доступе к BLOC где угодно, а также гарантирует, что класс создается только один раз.
Я также могу гарантировать безопасность при использовании одного BLOC внутри другого BLOC и передаче синглтона, как если бы это была просто другая реализация.
Каковы могут быть последствия этого?
Редактировать
У меня два блока
- AuthenTicationBloc - это глобальный блок
- UserBloc - должен существовать только один раз (синглтон)
AuthenTicationBloc должен использовать UserBloc внутри себя. Если бы я сделал UserBloc синглтоном, можно было бы просто использовать его как UserBloc()
.
В противном случае мне пришлось создать UserBloc как переменную экземпляра в AuthenTicationBloc следующим образом:
class AuthenTicationBloc {
UserBloc _userBloc;
AuthenTicationBloc({@required UserBloc userBloc}) : _userBloc = userBloc;
myMethod(){
//use the userBloc
_userBloc.setDetails();
}
}
runApp(
UserBloc userBloc = UserBloc();
Provider(
value: AuthenTicationBloc(userBloc: userBloc),
child: MyApp(),
),
);
Если бы мне пришлось использовать UserBloc в цепочке виджетов где-то еще, мне пришлось бы сделать так, чтобы UserBloc также предоставлялся глобально, как показано ниже, верно?
UserBloc userBloc = UserBloc();
MultiProvider(
providers: [
Provider<AuthenTicationBloc>(
value: AuthenTicationBloc(userBloc:userBloc),
),
Provider<UserBloc>(
value: userBloc,
),
],
child: MyApp(),
);