#flutter #dart #bloc
#flutter #dart #блок
Вопрос:
У меня есть 2 пользовательских виджета, и я хочу использовать один и тот же файл блока. Мой файл блока получает данные из Интернета в конструкторе.
class MyBloc {
// StreamControllers, StreamSinks, Streams ...
MyBloc() {
getDataFromInternet();
}
}
class MyWidget1 extends StatefulWidget {
MyWidget1({Key key}) : super(key: key);
@override
_MyWidget1State createState() => _MyWidget1State();
}
class _MyWidget1State extends State<MyWidget1> {
MyBloc _bloc;
@override
void initState() {
_bloc = MyBloc();
super.initState();
}
}
class MyWidget2 extends StatefulWidget {
MyWidget2({Key key}) : super(key: key);
@override
_MyWidget2State createState() => _MyWidget2State();
}
class _MyWidget2State extends State<MyWidget2> {
MyBloc _bloc;
@override
void initState() {
_bloc = MyBloc();
super.initState();
}
}
Моя проблема в том, что он загружает данные каждый раз, когда меняется экран (на экране появляется любой из двух виджетов).
Должен ли я передавать инициализированный объект блока виджетам в конструкторах, а не создавать новый блок в конструкторе виджетов? Я не хочу сохранять данные и писать логику, чтобы проверить, скачал ли я их уже или нет.
Комментарии:
1. Вы можете использовать блок в родительском виджете, который запускает эти два виджета и передает необходимые данные.
Ответ №1:
Используйте эту реализацию блокаhttps://bloclibrary.dev / На данный момент у вашего блока будет один экземпляр с одним состоянием. Вызывайте новое состояние в зависимости от предыдущего, и у вас никогда не возникнет проблем с ненужными запросами или чем-то подобным.