Как использовать один и тот же блок для разных виджетов в Flutter?

#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 / На данный момент у вашего блока будет один экземпляр с одним состоянием. Вызывайте новое состояние в зависимости от предыдущего, и у вас никогда не возникнет проблем с ненужными запросами или чем-то подобным.