我正在尝试创建一个“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()),
),
);
},
);
所以当用户选择一个新类别时,我尝试像这样更新流:
CategoryStream().updateCategory(currentChosenCategory);
无论我做什么,结果总是null。虽然在 print() 函数中显示了正确的类别...... 我错过了什么?
也许我需要使用 StreamProvider?不是 StreamBuilder?因为我将父小部件中的数据添加到子小部件的子小部件中..
答案 0 :(得分:1)
默认情况下,StreamController
的值为空。在 initialData
中调用 snapshot.data
之前,您需要设置为 StreamBuilder
或将数据添加到流中:
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
),
);
},
);