我必须动态更改AppBar的外观和项目(通过点击另一个UI元素)。 最好的方法是什么?

我测试了几种方法。例如,

return Scaffold(
      appBar: StreamBuilder(
          stream: bloc.tasks,
          builder: (context, AsyncSnapshot<List<UserTask>> tasks) {
            return new AppBar();/// my setup is here
          }),

但这显然无法编译。

最佳答案

appBar需要一个实现PreferredSizeWidget的小部件,而StreamBuilder不是一个。

您可以将该树包装成PreferredSize:

Scaffold(
  appBar: PreferredSize(
    preferredSize: const Size(double.infinity, kToolbarHeight),
    child: // StreamBuilder
  ),
)