扑朔迷离的AppBar
将List<Widget>
作为动作。由于某种原因,我找不到基于StreamBuilder
来馈送此属性的方法。
我有一个BehaviorSubject(可以更改为其他类型的流),我要在其中添加小部件,并且想要在AppBar中显示这些小部件(作为操作按钮)
// ....
var appBar = new AppBar(
title: "appTitle",
actions: _getActionWidgets() // <= Can be fed by SteamBuilder?
)
/// ...
// ...
// BehaviorSubject<Widget> actionWidgets;
// ...
List<Widget> _getActionWidgets(){
return StreamBuilder(
... // what can be done here so that this method would return List<Widget>
);
}
大部分示例都使用ListView
来表示“ ListView.builder(...)
”,在我的情况下不适用。
最终目标是使用StreamBuilder来填充actions
的{{1}}属性,并努力寻找方法。感谢您的帮助或指导,并感谢您拨冗阅读我的问题。
答案 0 :(得分:1)
只需用包含actions
的单元素List
填充StreamBuilder
即可:
actions: [
StreamBuilder(
builder: (context, snapshot) {
return Row(children: [
// Your widgets here
]);
}
),
]
答案 1 :(得分:0)
不。不是这种情况。您的情况下的操作通常是按钮(FlatButton,IconButton等)。您的案件可能如下所示:
class Bloc {
final _subject = BehaviourSubject<List<Widget>>();
...
}
void initState() {
super.initState();
// Prepare actions depending on condition
final actions = [
FlatButton(child: Text('Action 1'), onPressed: () {}),
FlatButton(child: Text('Action 2'), onPressed: () {}),
];
bloc.setActions(actions); // indeed send actions to sink
}
Widget build(BuildContext context) {
return StreamBuilder<List<Widget>>(
stream: bloc.actionStream, // Function of `bloc` which returns Stream<List<Widget>> (indeed IconButton, FlatButton)
builder: (context,snapshot) {
return Scaffold(
appBar: AppBar(
actions: snapshot.hasData? snapshot.data : <Widget>[],
),
);
}
);
}