Ank*_*ash 5 flutter inherited-widget bloc flutter-provider
需要了解什么时候应该Bloc模式以及Bloc的生命周期(如何释放持有内存的对象)
我有一个屏幕,我从服务器获取数据,数据将仅用于单个屏幕。我正在使用 Bloc 模式来显示数据。
使用 Bloc 模式时,我有一个正在使用 StatelessWidget 的屏幕。我正在尝试处理“WillPopScope”上的流。一旦被处置,流就不能再使用。因为访问同一屏幕会导致崩溃,因为我用 Bloc 包装了 MaterialApp。
final _leaderBoardList = StreamController<List<dynamic>>.broadcast();
Run Code Online (Sandbox Code Playgroud)
dispose() {
print('_leaderBoardList disposed');
_leaderBoardList.close();
}
Run Code Online (Sandbox Code Playgroud)
LeaderBoardProvider(
child: MaterialApp(
title: 'Table View Fetch',
theme: ThemeData(
primarySwatch: Colors.teal,
),
home: HomeScreen(),
),
);
Run Code Online (Sandbox Code Playgroud)
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),
);
}
Run Code Online (Sandbox Code Playgroud)
第一个问题,假设我创建一个广播流并删除“WillPopScope”中的代码处理,那么一切都会按预期工作,但我认为,这样,我的 Bloc 就可以为应用程序生命周期保留内存。
第二个问题,如何处理在屏幕内使用数据的情况。对于这种情况,是否推荐 Bloc 模式?
您不应该在WillPopScope.
“提供者”的工作是处理 BLoC 的处置:当提供者小部件从树中删除时,它应该关闭流。
这是通过您的 Provider 作为一个StatefulWidget(具有内部私有InheritedWidget来公开 BLoC)和重写dispose方法来实现的。
请参阅Flutter:如何正确使用继承的 Widget?举个例子(它与 BLoC 无关,也没有dispose,但想法相似)。
| 归档时间: |
|
| 查看次数: |
12996 次 |
| 最近记录: |