小编Fir*_*ike的帖子

Flutter - 如何构建多个嵌套的 BLoC?

假设有一个名为 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)

dart flutter rxdart

9
推荐指数
1
解决办法
1万
查看次数

如何检测 Flutter web CanvasKit 或 HTML 渲染器?

目前 Flutter Web 有两个后端,即 HTML 和 CanvasKit。作为库作者,出于性能原因,我想确定应用程序当前在哪个后端上运行。有没有办法在代码中检测到这一点?

dart flutter canvaskit

5
推荐指数
2
解决办法
3794
查看次数

Flutter-关闭窗口小部件时,BloC流实例是否会导致内存泄漏?

在某些情况下,经常会创建和关闭带有各自BLoC的屏幕。因此,我有点担心在此过程中创建的Streams实例的内存安全性,因为似乎它们没有放置在某个地方或它们是否经过GC处理。显然,这取决于DART库和Flutter的特定实现。因此,如果您知道他们的行为,请告诉我。

这些是我遇到的一些情况。

  1. 类似于浏览器的多选项卡应用程序。
  2. 通过屏幕导航。(但这不是那么有害。)
  3. 对话框中有BLoC时显示showDialog()。这是一种更为常见的说法。应用中可能经常弹出很多对话框。

我想知道是否有必要重写dispose()函数并显式关闭BLoCProvider中的所有流。似乎现有的教程没有提到它。

dart flutter rxdart

4
推荐指数
1
解决办法
1664
查看次数

使用 Android Q 中引入的 Scoped Storage,我应该如何开发文件管理器应用程序?

Android Q 将为应用程序引入一个新的沙盒文件系统 Scoped Storage。此政策将对任何面向 API>=29 的应用强制执行。第三方文件管理器应用程序应该如何通过此限制并继续正常工作?

此问题适用于具有某些文件管理功能(如浏览、保存、加载、同步等)的任何应用程序。

android android-permissions android-10.0

4
推荐指数
1
解决办法
1419
查看次数

Flutter-BLoC模式-如何使用流来调用另一个小部件的方法(即动画)?

假设有一个具有控制可见性动画的方法的小部件toggleVisibility()。在BLoC模式中,我想使用流来调用该函数。我觉得这很棘手。

  1. 由于它是动画而不是完整的重绘,因此StreamBuilder不适合。
  2. 手动将侦听器添加到BLoC流也不方便。

    1. initeState()目标小部件的功能中,我们没有上下文,因此很难获得对BLoC的引用。

    编辑:在我阅读RémiRousselet的答案后,情况并非如此。我们甚至可以在build()函数外部访问上下文,因为State<T>类具有名为“ context”的属性,并且在Flutter的文档中进行了记录。...我当时并不知道。

    1. build(context)目标小部件的功能中,我们具有上下文。但是小部件可以经常重新构建,因此您必须手动清除过时的订阅。否则会产生大量垃圾。
  3. 由于StreamBuilder已经实现了所有订阅和取消订阅功能,因此可以使用StreamBuilder进行黑客攻击。在目标窗口小部件的布局中的某处插入StreamBuilder。

    StreamBuilder( stream: Bloc.of(context).stream, builder: (context, snapshot){ toggleVisiblity(); return Container(): } );

但这确实是一个hack。它混合了布局和逻辑,并引入了一个无用的小部件,它可能会导致布局错误。

因此,我想知道是否有一种很好的方法来扑朔迷离。

dart flutter rxdart

2
推荐指数
1
解决办法
2134
查看次数