我可以从构建方法之外访问Bloc流中的数据吗?
例如,在build方法中,我可以使用snapShot.data访问数据。像这样:
return StreamBuilder(
//initialData: Colors.blue,
stream: colorBloc.colorStream,
builder: (BuildContext context, snapShot) => Container(
width: menuButtonSize,
height: menuButtonSize,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: snapShot.data, //This returns the correct colour previously stored in this stream.
boxShadow: [
BoxShadow(
color: Colors.black,
blurRadius: 15,
),
],
),
),
);
但是要对另一个我要工作的Bloc实例进行故障排除,我希望能够以某种方式打印出snapShot.data的当前值,这样我就可以看到它在做什么以及它是否正确更新,因为目前无法使用。
当前无效的Bloc代码段
Widget customTheme() {
return StreamBuilder(
initialData: true,
stream: customToggleBloc.customToggleStream,
builder: (BuildContext context, snapShot) => GestureDetector(
onTap: (){
snapShot.data == true ? widget?._callback('custom') : widget?._callback('clearcustom'); //Section A
},
child: Container(
width: menuButtonSize + 8,
height: menuButtonSize + 8,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: AppState.brownTheme,
boxShadow: [
BoxShadow(
color: Colors.black,
blurRadius: 25,
),
],
),
child: new IconTheme(
data: new IconThemeData(
color: Colors.white,
size: 35,
),
child: snapShot.data == true ? new Icon(Icons.add_photo_alternate) : new Icon(Icons.cancel), // Section B
),
),
),
);
}
所以我想做的是有一个始终处于两种状态之一的按钮。 1)它显示Icons.add_photo_alternate并允许您从图库中选择图像; 2)显示Icons.cancel并删除以前选择的图像。 A部分处理onPress事件选项,B部分处理显示的图标。
我真正得到的始终是Icons.add_photo_alternate,在按下时实际上会触发这两个备用代码块。
因此,我真的很希望能够访问此数据,以查看可能出问题的地方!
我正在尝试类似的变化形式
print(customToggleBloc.customToggleSink.toString());
哪个返回:
Instance of '_StreamSinkWrapper<bool>'
而不是里面的值。甚至可以访问此信息吗?
答案 0 :(得分:0)
我认为此行为是由于您的stream
不返回任何数据,因此依赖于您提供的initialData
构建其子级。可以肯定的是,您可以删除{{1} },然后将initialDate: true
包裹在StreamBuilder
中,以检查数据是否存在:如果数据可用,则会构建builder
,如果没有{{1} }将显示在中间。这样,您将知道if-else
发生了什么事情:
GestureDetector