Flutter (颤振)StreamBuilder仅返回null
我正在尝试创建一个“CategoryStream”来根据用户的选择更新UI 这是我的流:Flutter (颤振)StreamBuilder仅返回null,flutter,dart,stream-builder,flutter-state,Flutter,Dart,Stream Builder,Flutter State,我正在尝试创建一个“CategoryStream”来根据用户的选择更新UI 这是我的流: import 'dart:async'; class CategoryStream { StreamController<String> _categoryStreamController = StreamController<String>(); closeStream() { _categoryStreamController.close(); } update
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;
}
无论我做什么,结果总是null。虽然在print()函数中显示了正确的类别。。。
我错过了什么
也许我需要和流媒体提供商合作?不是一个流生成器?因为我正在将数据从父窗口小部件添加到子窗口小部件的子窗口小部件。默认情况下,
StreamController
的值为空。在调用StreamBuilder
中的snapshot.data
之前,需要设置为initialData
或向流中添加数据:
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
),
);
},
);
final CategoryStream\u CategoryStream=CategoryStream();
返回流生成器(
流:_categoryStream.stream,
初始数据:“”,
生成器:(上下文,快照){
返回容器(
颜色:颜色,白色,
儿童:中心(
child:Text(snapshot.data),//不需要toString(),您的数据已经是字符串了
),
);
},
);
我想通过调用_categoryStream.updateCategory(currentChosenCategory)我会将数据添加到流中?是的,它会将数据添加到流中,但是您会遇到许多可能导致值为null的小错误。我的回答解决了你的问题吗?如果没有,请发布日志。我应该提到,在另一个小部件中调用了_categoryStream.updateCategory(currentChosenCategory)。这是个问题吗?它应该连接到同一个流,不是吗?不,它仍然不起作用。但是没有错误。我想我只是没有正确理解流。你能发布你的全部代码,包括调用_categoryStream.updateCategory()的部分吗?在返回容器之前添加打印(快照)
(
-你在日志上看到了什么?只有空。问题是,我想提供更多的代码,但是小部件太大,无法在这里发布。我想我可能使用了错误的流实例?因为我在两个小部件中都创建了_categoryStream。两个实例“使用同一个流”会不会工作?你的意思是快照
为空
?-这是不可能的是,你是对的,你不能创建类别流
的多个实例,希望它们都引用同一个流-这就是为什么你只有“等待”状态hmm,然后我会参考一些好的教程来解释提供者
包;-)
CategoryStream().updateCategory(currentChosenCategory);
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
),
);
},
);