Может ли StreamBuilder вернуть List <Widget>
An 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(...)
что не применимо в моем случае здесь.
Конечная цель - накормить actions
свойство AppBar
используя StreamBuilder и пытаясь найти способ. Я признателен за любую помощь или указания и спасибо за то, что вы уделили время чтению моего вопроса.
2 ответа
Нет, это не так. Действиями в вашем случае обычно являются кнопки (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>[],
),
);
}
);
}
Просто заполнить actions
с одноэлементным List
, содержащий StreamBuilder
:
actions: [
StreamBuilder(
builder: (context, snapshot) {
return Row(children: [
// Your widgets here
]);
}
),
]