StreamBuilder可以返回List <Widget>

时间:2020-06-29 13:55:37

标签: flutter rxdart dart-stream

扑朔迷离的AppBarList<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}}属性,并努力寻找方法。感谢您的帮助或指导,并感谢您拨冗阅读我的问题。

2 个答案:

答案 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>[],
        ),
      );
    }
  );
}