需要了解何时应该使用Bloc模式以及Bloc的生命周期(如何释放持有内存的对象)
我有一个屏幕,从服务器获取数据并仅在单个屏幕上使用。我正在使用Bloc模式来显示数据。
在使用Bloc模式时,我有一个屏幕,其中使用StatelessWidget。我试图在“WillPopScope”上处理流。一旦处理掉,流就不能再使用了。因为我已经用Bloc包装了我的MaterialApp,所以访问相同的屏幕会导致崩溃。
1.创建了一个流
在提供程序中包装Material App:
使用provider库将Material App包装在提供程序内,以便更方便地访问状态管理和响应式编程。
无状态组件'WillPopScope',我已经注释掉了dispose代码,因为目前bloc只创建一次,这是我理解的。
我有一个屏幕,从服务器获取数据并仅在单个屏幕上使用。我正在使用Bloc模式来显示数据。
在使用Bloc模式时,我有一个屏幕,其中使用StatelessWidget。我试图在“WillPopScope”上处理流。一旦处理掉,流就不能再使用了。因为我已经用Bloc包装了我的MaterialApp,所以访问相同的屏幕会导致崩溃。
1.创建了一个流
final _leaderBoardList = StreamController<List<dynamic>>.broadcast();
- 处理流
dispose() {
print('_leaderBoardList disposed');
_leaderBoardList.close();
}
在提供程序中包装Material App:
使用provider库将Material App包装在提供程序内,以便更方便地访问状态管理和响应式编程。
LeaderBoardProvider(
child: MaterialApp(
title: 'Table View Fetch',
theme: ThemeData(
primarySwatch: Colors.teal,
),
home: HomeScreen(),
),
);
无状态组件'WillPopScope',我已经注释掉了dispose代码,因为目前bloc只创建一次,这是我理解的。
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在应用程序的生命周期内持有内存。
第二个问题,如何处理在屏幕内使用数据的情况。Bloc模式是否推荐用于此情况?
_ViewControllerState createState() => _ViewControllerState();
}
class _ViewControllerState extends State<ViewController> {
// 将小部件的持久状态放在这里
@override
Widget build(BuildContext context) {
// 基于持久状态返回小部件
}
}
您是指State子类吗?请举个例子。 - Ankur Prakash