通过Streambuilder收听Stream时对象被跳过

时间:2019-01-30 13:34:08

标签: dart flutter

我正在尝试收听目录提供的流。 Flutter Directory Doc

问题是,如果有9个目录,它只会打印出最后一个目录而跳过其余目录,对于这些概念,我还是很陌生,无法自己调试。

当我尝试在initState中打印注释的侦听器时,它会打印每个目录。

class _MediaFilesState extends State<MediaFiles> {
  Directory internalStorage = Directory('/storage/emulated/0/');

  WatchlistDatabase watchlistDatabase = WatchlistDatabase();

  StreamController<FileSystemEntity> _streamController =
      StreamController<FileSystemEntity>();

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    checkMediaPath();

    _streamController
        .addStream(internalStorage.list(recursive: false, followLinks: false));

    // _streamController.stream.listen((FileSystemEntity entity) {
    //   if (entity is File) {
    //     print(entity.path);
    //   } else {
    //     print(entity.path);
    //   }
    // });
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    _streamController.close();
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      backgroundColor: Color(0xFF131214),
      appBar: AppBar(),
      ),
      body: ListView(
        children: <Widget>[
          Container(
            child: mediaFilesWidget,
          ),
          Container(
            height: 400,
            width: 250,
            child: StreamBuilder(
              stream: _streamController.stream,
              initialData: 23,
              builder: (BuildContext context, snapshot) {
                if (snapshot.hasData) {
                  print(snapshot.data.path);
                }
                return CircularProgressIndicator();
              },
            ),
          )
        ],
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

您可以使用https://pub.dartlang.org/documentation/rxdart/latest/rx/Observable/scan.html中的scan方法/转换器将先前事件中的值收集到值数组中。