【发布时间】:2021-04-19 01:37:30
【问题描述】:
我正在尝试创建一个“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?因为我正在将来自 Parent-Widget 的数据添加到 Child-Widget 的 Child-Widget..
【问题讨论】:
-
在
return Container(之前添加print(snapshot)- 您在日志中看到了什么? -
只有空值。问题是,我想提供更多代码,但小部件太大,无法在此处发布。我想我可能正在使用错误的流实例?因为我在两个小部件中都创建了 _categoryStream。不是两个实例都“使用相同的流”吗?
-
你的意思是
snapshot是null? - 这是不可能的 -
是的,你是对的,你不能创建多个
CategoryStream实例,希望它们都引用同一个流 - 这就是为什么你只有“等待”状态 -
hmmm,那我会参考一些很好的教程来解释
Providerpackage ;-)
标签: flutter dart stream-builder flutter-state