Необходимо понять, когда мы должны использовать шаблон Bloc и жизненный цикл Bloc (как освободить объекты, содержащие память).
У меня есть экран, на котором я получаю данные с сервера, и данные будут использоваться только для одного экрана. Я использую шаблон Bloc для отображения данных.
При использовании шаблона Bloc у меня есть экран, на котором я использую StatelessWidget. Я пытаюсь избавиться от потока на WillPopScope. После удаления поток больше не может использоваться. Потому что посещение того же экрана приводит к сбою, поскольку я обернул свое приложение MaterialApp с помощью Bloc.
- создал поток
final _leaderBoardList = StreamController<List<dynamic>>.broadcast();
- поток утилизации
dispose() {
print('_leaderBoardList disposed');
_leaderBoardList.close();
}
- обертывание приложения Material внутри провайдера:
LeaderBoardProvider(
child: MaterialApp(
title: 'Table View Fetch',
theme: ThemeData(
primarySwatch: Colors.teal,
),
home: HomeScreen(),
),
);
- Statelesswidget 'WillPopScope', я прокомментировал удаление кода, поскольку в настоящее время блок создается один раз, как я понял:
Widget build(BuildContext context) {
print(' ListView fetch Build called');
final bloc = LeaderBoardProvider.of(context);
bloc.fetchLeaderBoards();
return WillPopScope(
onWillPop: () async {
//bloc.dispose();
return true;
},
child: bodyStack(context, bloc),
);
}
Первый вопрос. Предположим, я создаю широковещательный поток и удаляю удаление кода в WillPopScope, тогда все работает, как ожидалось, но я думаю, что таким образом мой блок будет хранить память на время жизни приложения.
Второй вопрос, как справиться с такими случаями, когда данные используются на экране. Рекомендуется ли шаблон Bloc для этой ситуации?