假设有一个名为 PreferenceBloc 的顶级 BLoC,在该 BLoC 内部是另一个名为 PageBloc 的 BLoC。如果 PageBloc 内部的逻辑需要来自 PreferenceBloc 的值流(即,创建新页面现在需要知道页面配置),我应该如何构建它?
代码示例:
class PreferencesBloc{
final preferencesService=PreferencesService();
// Output interfaces of Bloc
ValueObservable<String> get mainDir => _mainDir.distinct().shareValue(seedValue: '/');
final _mainDir = BehaviorSubject<String>(seedValue: '/');
// Input interfaces of Bloc...
// .........
}
class PageBloc{
final List<PageInfo> _pageInfos=<PageInfo>[];
// Output interfaces of Bloc...
// .........
// Input interfaces of Bloc...
Sink<int> get pageCreation => _pageCreationController.sink;
final _pageCreationController = StreamController<int>();
pageBloc(){
_pageCreationController.stream.listen(_handleCreation);
}
void _handleCreation(int pos){
_pageInfo.insert(pos, PageInfo('I need the mainDir here!')); …Run Code Online (Sandbox Code Playgroud) 目前 Flutter Web 有两个后端,即 HTML 和 CanvasKit。作为库作者,出于性能原因,我想确定应用程序当前在哪个后端上运行。有没有办法在代码中检测到这一点?
在某些情况下,经常会创建和关闭带有各自BLoC的屏幕。因此,我有点担心在此过程中创建的Streams实例的内存安全性,因为似乎它们没有放置在某个地方或它们是否经过GC处理。显然,这取决于DART库和Flutter的特定实现。因此,如果您知道他们的行为,请告诉我。
这些是我遇到的一些情况。
我想知道是否有必要重写dispose()函数并显式关闭BLoCProvider中的所有流。似乎现有的教程没有提到它。
Android Q 将为应用程序引入一个新的沙盒文件系统 Scoped Storage。此政策将对任何面向 API>=29 的应用强制执行。第三方文件管理器应用程序应该如何通过此限制并继续正常工作?
此问题适用于具有某些文件管理功能(如浏览、保存、加载、同步等)的任何应用程序。
假设有一个具有控制可见性动画的方法的小部件toggleVisibility()。在BLoC模式中,我想使用流来调用该函数。我觉得这很棘手。
手动将侦听器添加到BLoC流也不方便。
initeState()目标小部件的功能中,我们没有上下文,因此很难获得对BLoC的引用。编辑:在我阅读RémiRousselet的答案后,情况并非如此。我们甚至可以在build()函数外部访问上下文,因为State<T>类具有名为“ context”的属性,并且在Flutter的文档中进行了记录。...我当时并不知道。
build(context)目标小部件的功能中,我们具有上下文。但是小部件可以经常重新构建,因此您必须手动清除过时的订阅。否则会产生大量垃圾。由于StreamBuilder已经实现了所有订阅和取消订阅功能,因此可以使用StreamBuilder进行黑客攻击。在目标窗口小部件的布局中的某处插入StreamBuilder。
StreamBuilder(
stream: Bloc.of(context).stream,
builder: (context, snapshot){
toggleVisiblity();
return Container():
}
);
但这确实是一个hack。它混合了布局和逻辑,并引入了一个无用的小部件,它可能会导致布局错误。
因此,我想知道是否有一种很好的方法来扑朔迷离。