Flutter — Возможно ли использовать блок без провайдера?

#flutter

#flutter

Вопрос:

 class App extends StatefulWidget {
....
return HomeProvider(
   homeBloc: HomeBloc(),
   child: MaterialApp(
      home: HomeScreen(),
   ),
);

class HomeScreen extends StatefulWidget {
   HomeBloc homeBloc = HomeBloc();
}  
  

Из двух приведенных выше сценариев большинство руководств, которые я прочитал, использует первый вариант. Является ли второй метод полностью неправильным? или это имеет какие-либо негативные последствия в приложении?

Я вижу одно отличие. Я могу получить доступ к homeBloc by HomeProvider.of context первым способом. Для второго метода я должен передать homeBloc все виджеты.

Ответ №1:

Конечно, вы можете использовать bloc без провайдера. Но если вы используете 2 экрана с одним и тем же блоком, значение потока внутри блока будет другим, потому что вы не используете InheritedWidget (обычно в провайдере). Функция провайдера заключается в предоставлении вашему блоку InheritedWidget, чтобы несколько экранов могли получать доступ к одному и тому же потоку.

Ответ №2:

Это определенно возможно. Прямо сейчас я использую один блок для всего своего приложения (поскольку я пришел из react-native redux, apollo background, single source of truth имеет больше смысла для меня). Пример похож на приведенный ниже. Вы можете объявить свой единственный экземпляр bloc и импортировать его везде, где вы его используете, чтобы ссылаться на тот же экземпляр.

 class Bloc {
  /// Your Bloc Stuff
}

final bloc = Bloc();