#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();