首页 > 解决方案 > (Flutter) StreamBuilder 只返回 null

问题描述

我正在尝试创建一个“CategoryStream”来根据用户的选择更新 UI。

这是我的流:

import 'dart:async';

class CategoryStream {
  StreamController<String> _categoryStreamController =
  StreamController<String>();

closeStream() {
  _categoryStreamController.close();
}

updateCategory(String category) {
  print("Update category in stream was called");
  print("the new category is: " + category);
  _categoryStreamController.sink.add(category);
}

Stream<String> get stream => _categoryStreamController.stream;
}

我的 StreamBuilder 看起来像这样:

 return StreamBuilder<String>(
  stream: CategoryStream().stream,
  builder: (context, snapshot) {
    return Container(
      color: Colors.white,
      child: Center(
        child: Text(snapshot.data.toString()),
      ),
    );
  },
);

因此,当用户选择一个新类别时,我尝试像这样更新 Stream:

  CategoryStream().updateCategory(currentChosenCategory);

无论我做什么,结果总是null。尽管 print() 函数中显示了正确的类别......我错过了什么?

也许我需要使用 StreamProvider?不是 StreamBuilder?因为我正在将来自 Parent-Widget 的数据添加到 Child-Widget 的 Child-Widget ..

标签: flutterdartstream-builderflutter-state

解决方案


默认情况下,a 的StreamController值为 null。在调用之前,您需要在流中设置initialData或添加数据:snapshot.dataStreamBuilder

 final CategoryStream _categoryStream = CategoryStream();
 return StreamBuilder<String>(
  stream: _categoryStream.stream,
  initialData: "",
  builder: (context, snapshot) {
    return Container(
      color: Colors.white,
      child: Center(
        child: Text(snapshot.data), //toString() is unnecessary, your data is already a string
      ),
    );
  },
);

推荐阅读